Laravel 5.4-如何找到相关的特定记录

时间:2018-08-17 12:21:03

标签: php laravel

我有一些雄辩的模型,名为ClientCompany。我的Client可能属于多个Company

public function companies()
{
    return $this->belongsToMany(Company::class);
}

我想检查提供的Client是否属于给定的Company。这就是我最终得到的:

$client->companies
        ->filter(
            function ($value, $key) use ($company) {
                return $company->getKey() === $value->getKey();
            }
        )
        ->count() > 0;

有没有更短的方法?

3 个答案:

答案 0 :(得分:6)

使用模型和关系集合:

$client->companies->contains($company);

使用关系查询来检查是否存在:

$client->companies()->where('company_id', $company->id)->exists();

// even shorter, and don't need to know about the key yourself

$client->companies()->whereKey($company)->exists();

从另一个方向走:

$company->clients->contains($client); // if setup
$company->clients()->where(....)->exists();

答案 1 :(得分:5)

您始终可以使用您的关系方法来查询关系:

$client->companies()->where('company_id', $company->id)->exists();

这使用查询生成器在数据库级别实际查询关系,这与将公司视为从数据库中获取所有相关行的集合的属性不同。

答案 2 :(得分:0)

尝试

$myArray = $client->companies->comp_id;

其中comp_id可以是任何列名称。这应该返回一个数组。然后通过执行以下操作检查数组是否为空:

if (empty($myArray))