Laravel检查关系是否为空

Jes*_*ssy 7 relationship laravel

我有一个有一些关系的对象,我需要检查这些关系是否为空,我正在尝试检查is_null,isset,!= undefined等,但没有任何作用,这是我得到的关系,它是空的:

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

有没有办法轻松检查?谢谢.

Dev*_*von 23

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

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

Model::has('relation')->get()
Run Code Online (Sandbox Code Playgroud)

拥有模型后,如果已经加载了集合,则可以检查集合的计数:

$model->relation->count();
Run Code Online (Sandbox Code Playgroud)

如果要在不加载关系的情况下进行检查,可以对关系运行查询:

$model->relation()->exists()
Run Code Online (Sandbox Code Playgroud)

注意:relation在上面的示例中替换为您的关系名称.


Cal*_*Kao 13

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

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

// For many relations:
if ( $model->relation->isEmpty() ) {
    // ...
}
Run Code Online (Sandbox Code Playgroud)

  • 这是正确的答案,“$model->relation()->exists()”运行另一个查询,即使有急切加载的结果。 (2认同)

Yev*_*yev 5

首先,您可能想检查是否Relation已加载

if ($user->relationLoaded('posts'))...
Run Code Online (Sandbox Code Playgroud)

第二,当它被加载时,你可能想看看它是空的Collection还是Null,

if ($user->posts()->exists())...
Run Code Online (Sandbox Code Playgroud)

聚苯乙烯

use Illuminate\Database\Eloquent\Relations\Relation;
use Illuminate\Database\Eloquent\Collection;
Run Code Online (Sandbox Code Playgroud)