第一个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,给定数组
我错了什么?
答案 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');
}