Listening to the Words

Laravel Eloquent:判断数据是否存在

使用Laravel Eloquent 会有一个很让我担心的问题,如何判断查询数据是否存在

$result=Email::query()->where('id',10000)->first();
$result=Email::query()->where('type',1)->get();

有时候查询结果返回null有时返回空集合,而空集合仅仅通过empty()或者直接if(!$result)判断是认为有值得

于是仔细翻看了文档:

first() 单条查询

$result=Email::query()->where('id',10000)->first();

当查询单条时,结果不存在Eloquent返回NULL,这是判断方式有:

如果想看 $user 是否有记录并且有记录时会使用:


$result=Email::query()->where('id',10000)->first();
if ($result === null) {
   // 没记录
}

如果仅仅想看 $user 是否有记录:


if (Email::query()->where('id',10000)->count() > 0) {
   // 有记录
}

更好的方法:
if (Email::query()->where('id',10000)->exists()) {
   // 有记录
}

get() 多条查询

多条查询时Eloquent 空值时返回一个空集合;

$result=Email::query()->where('type',1)->get();

// object(Hyperf\Database\Model\Collection)#121092 (1) {
  ["items":protected]=>
  array(0) {
  }
}

因此判空的方式是:

$result=Email::query()->where('type',1)->get();
if($result->isEmpty()){
//
}

Email::query()->where(‘type’,1)->get() 写法来自Hyperf Framework,Hyperf提供了Laraval Eloquent组件,只是使用方法稍有变动

点赞