我有一个具有某些关系的对象,我需要检查这些关系是否为空,我正在尝试使用is_null,isset,!= undefined等进行检查,但是没有任何效果,这是我在以下情况下得到的关系它是空的:
object(Illuminate\Database\Eloquent\Collection)#197 (1) {
["items":protected]=>
array(0) {
}
}
有没有一种方法可以方便地进行检查? 谢谢。
答案 0 :(得分:13)
有多种方法可以做到这一点。
在查询本身中,您可以过滤没有任何相关项目的模型:
Model::has('relation')->get()
有了模型后,如果您已经加载了集合,则可以检查集合的数量:
$model->relation->count();
如果要检查而不加载该关系,则可以在该关系上运行查询:
$model->relation()->exists()
注意:在上述示例中,将relation
替换为您的亲戚名称。
答案 1 :(得分:1)
$model->relation()->exists()
if (count($model->relation))
{
// check exists
}
也 第二种方法
if(!is_null($model->relation)) {
....
}
答案 2 :(得分:0)
如果模型已经具有加载关系,则可以确定变量为null
或调用isEmpty()
来检查相关项目:
// For one relation:
if ( $model->relation ) {
// ...
} else {
// $model->relation is null
}
// For many relations:
if ( $model->relation->isEmpty() ) {
// ...
}
答案 3 :(得分:0)
这不能直接回答问题,但是您可以使用Laravel的optional
助手在您怀疑可能没有值的关系上调用方法:
optional($user->comments)->where('is_popular', true);
如果用户没有评论,则将返回null。否则,它将返回用户的流行评论。
答案 4 :(得分:0)
首先,您可能要检查您的Relation
是否已加载
if ($user->relationLoaded('posts'))...
秒,在加载时,您可能想查看它是空的Collection
还是Null
,
if ($user->posts()->exists())...
PS
use Illuminate\Database\Eloquent\Relations\Relation;
use Illuminate\Database\Eloquent\Collection;