2017-03-03 65 views
3

第一个Laravel项目。我有一个控制器功能,检查是否有条形码记录。如果没有插入记录。如果是,请为计数添加一个。Laravel:检查MySQL查询是否有结果

public function sellmode(Request $request){ 
    $barcode=$request->barcode; 
    $test = DB::select('select count from sellmode where barcode = ?', [$barcode]); 
    $row_cnt = mysqli_num_rows($test); 
    if ($row_cnt == 0) { 
     Debugbar::info('Új sor'); 
     DB::insert('insert into sellmode (barcode, count) VALUES (?, ?)', [$barcode, '1']); 
    } else { 
     Debugbar::info('Meglévő frissítése'); 
     DB::update('update sellmode set count = count + 1 WHERE barcode = ?' [$barcode]); 
    } 
    return view(sell); 

}

当我试了一下,它有以下错误:

ErrorException in SellController.php line 17: mysqli_num_rows() expects parameter 1 to be mysqli_result, array given

我是怎么了?

+0

你不应该使用'mysqli_num_rows'或这里的任何mysqli的相关功能。 Laravel使用PDO。尽管出于参数的原因,如果你想看看有多少行返回,你可以计算结果数组中的值的数量......'$ row_cnt = count($ test);' – Jonathon

回答

3

您不能只在Laravel查询构建器上使用mysql_num_rows。 Laravel查询生成器将返回一个collection,因此您可以使用isEmpty函数来确定它是否有任何结果。

if ($test->isEmpty()) { 
    Debugbar::info('Új sor'); 
    DB::insert('insert into sellmode (barcode, count) VALUES (?, ?)', [$barcode, '1']); 
} else { 
    Debugbar::info('Meglévő frissítése'); 
    DB::update('update sellmode set count = count + 1 WHERE barcode = ?' [$barcode]); 
} 

如果您在5.3之前使用Laravel版本,查询生成器将返回一个数组。在这种情况下,你可以使用这个阵列上的PHP count功能知道返回多少行

if (count($test) === 0) { 
    Debugbar::info('Új sor'); 
    DB::insert('insert into sellmode (barcode, count) VALUES (?, ?)', [$barcode, '1']); 
} else { 
    Debugbar::info('Meglévő frissítése'); 
    DB::update('update sellmode set count = count + 1 WHERE barcode = ?' [$barcode]); 
} 
+0

谢谢,但我得到了另一个错误:“SellController.php中的FatalThrowableError第17行:调用成员函数isEmpty()on array” – Feralheart

+0

在这种情况下,您可能使用的Laravel版本低于5.3。我已经用这些版本的解决方案更新了我的答案。 – Jerodev

+0

我想,我使用5.3,但现在我运行'php artisan --version',输出结果是'Laravel Framework 5.4.13'。我尝试了第二个命令,“新行”正在工作,但“更新”的输出是这个错误消息:SQLSTATE [42000]:语法错误或访问冲突:1064您的SQL语法错误;请检查与您的MySQL服务器版本相对应的手册,以获得在第1行'o'附近使用的正确语法(SQL:o) – Feralheart

2

这将是建立一个模型,并用它来查询数据库是一个好主意。也许这样的事情(在我看来,这是比较容易的方式):

$sellMode = SellMode::where('barcode', $barcode)->get(); 
if($sellMode->isEmpty()){ 
    Debugbar::info('Új sor'); 
    $sellMode = SellMode::create(['barcode' => $barcode, 'count' => 1]); 
} 
else{ 
    Debugbar::info('Meglévő frissítése'); 
    $sellMode->increment('count'); 
} 
+0

不知道您使用的是哪个版本,但请查看文档:https:/ /laravel.com/docs/5.4/eloquent –