我有一些雄辩的模型,名为Client
和Company
。我的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;
有没有更短的方法?
答案 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))