Laravel:检查 MySQL 查询是否有结果
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/42589861/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Laravel: Check if MySQL query has result
提问by Feralheart
First Laravel project. I have a controllerfunction what checks if there any record with that barcode. If no insert a record. If yes add one for the count.
第一个 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);
}
}
When I tried it, it had the following error:
当我尝试它时,它有以下错误:
ErrorException in SellController.php line 17: mysqli_num_rows() expects parameter 1 to be mysqli_result, array given
SellController.php 第 17 行中的 ErrorException:mysqli_num_rows() 期望参数 1 为 mysqli_result,给定数组
What did I wrong?
我做错了什么?
回答by Jerodev
You can't just just mysql_num_rows
on a Laravel query builder. Laravel query builder will return a collection, so you can just use the isEmpty
function to find out if it has any results.
你不能只mysql_num_rows
在 Laravel 查询构建器上。Laravel 查询生成器将返回一个集合,因此您可以使用该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]);
}
If you are using a Laravel version pre-5.3, the query builder will return an array. In this case, you can use the php count
function on this array to know how many rows are returned
如果您使用的是 Laravel 5.3 之前的版本,则查询构建器将返回一个数组。在这种情况下,你可以count
在这个数组上使用php函数来知道返回了多少行
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]);
}
回答by Ulrik McArdle
It would be a good idea to create a model and use that to query the db. Maybe something like this (in my opinion it is way easier):
创建一个模型并使用它来查询数据库是个好主意。也许是这样的(在我看来它更容易):
$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');
}
回答by user8128167
When I used test->isEmpty()
or count($test) == 0
I still kept getting this error:
当我使用test->isEmpty()
或count($test) == 0
我仍然不断收到此错误时:
Undefined offset: 0
未定义的偏移量:0
So I ended up using this to check for an empty return value from DB::select:
所以我最终使用它来检查来自 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');
}