Laravel检查关系是否为空

时间:2018-07-17 13:23:26

标签: laravel relationship

我有一个具有某些关系的对象,我需要检查这些关系是否为空,我正在尝试使用is_null,isset,!= undefined等进行检查,但是没有任何效果,这是我在以下情况下得到的关系它是空的:

object(Illuminate\Database\Eloquent\Collection)#197 (1) {
  ["items":protected]=>
    array(0) {
  }
}

有没有一种方法可以方便地进行检查? 谢谢。

5 个答案:

答案 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;