Laravel检查关系是否为空

Laravel检查关系是否为空,laravel,relationship,Laravel,Relationship,我有一个具有一些关系的对象,我需要检查这些关系是否为空,我正在尝试使用is_null,isset,!=未定义,等等,但没有任何效果,以下是当关系为空时得到的关系: object(Illuminate\Database\Eloquent\Collection)#197 (1) { ["items":protected]=> array(0) { } } 有什么方法可以很容易地检查这个问题吗? 谢谢 也 第二种方法 if(!is_null($model->relatio

我有一个具有一些关系的对象,我需要检查这些关系是否为空,我正在尝试使用is_null,isset,!=未定义,等等,但没有任何效果,以下是当关系为空时得到的关系:

object(Illuminate\Database\Eloquent\Collection)#197 (1) {
  ["items":protected]=>
    array(0) {
  }
}
有什么方法可以很容易地检查这个问题吗? 谢谢

也 第二种方法

if(!is_null($model->relation)) {
   ....
}

有多种方法可以做到这一点

在查询本身中,可以筛选没有任何相关项的模型:

Model::has('relation')->get()
// For one relation:
if ( $model->relation ) {
    // ...
} else {
    // $model->relation is null
}

// For many relations:
if ( $model->relation->isEmpty() ) {
    // ...
}
拥有模型后,如果已加载集合,则可以检查集合的计数:

$model->relation->count();
如果要在不加载关系的情况下进行检查,可以对关系运行查询:

$model->relation()->exists()

注意:将上述示例中的
关系
替换为您的关系名称

如果模型已加载关系,则可以确定变量为
null
或调用
isEmpty()
检查相关项:

Model::has('relation')->get()
// For one relation:
if ( $model->relation ) {
    // ...
} else {
    // $model->relation is null
}

// For many relations:
if ( $model->relation->isEmpty() ) {
    // ...
}

这并不能直接回答这个问题,但是您可以使用Laravel的
可选的
帮助程序来调用您怀疑可能没有值的关系的方法:

optional($user->comments)->where('is_popular', true);

如果用户没有注释,则返回null。否则它将返回用户的流行评论。

首先,您可能需要检查您的
关系是否已加载

if ($user->relationLoaded('posts'))...
其次,在加载时,您可能希望查看它是空的
集合
还是
Null

if ($user->posts()->exists())...
PS


我已经用我的关系尝试了第二种方法(is_null($experience->tm()),但这也不起作用:/第一种方法没有返回任何结果:/奇怪的是,我的模型没有关系方法。关系是这个关系中的关系名,而不是文字关系方法。非常好的答案,谢谢$model->relation()->exists()我认为它将返回一个空集合,而不是Null$model->relation->isEmpty()是这个问题的定义答案。这是正确的答案,
$model->relation()->exists()
运行另一个查询,即使有急切加载的结果。