Laravel:检查MySQL查询是否有结果

时间:2017-03-03 22:57:49

标签: php mysql laravel laravel-5

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

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);

}

当我尝试它时,它出现以下错误:

  

SellController.php第17行中的ErrorException:mysqli_num_rows()   期望参数1为mysqli_result,给定数组

我错了什么?

3 个答案:

答案 0 :(得分:4)

您不仅可以在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]);
}

答案 1 :(得分: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');
}

答案 2 :(得分:0)

使用test->isEmpty()count($test) == 0时,我仍然不断收到此错误:

  

未定义的偏移量:0

所以我最终使用它来检查DB :: select:

的空返回值。
$test = DB::select('select count from sellmode where barcode = ?', [$barcode]);

if(collect($test)->first()) {
    // ...
} else {
    $response = new \stdClass();
    $response->error = true;
    $response->message = 'Sellmode not found';
    return response(json_encode($response))->header('Content-Type','application/json');                
}