我不确定是否有相反的情况,但是如果您只是想让查询更可重用,您可以通过将其添加到您的 Person 模型来使其成为本地范围:
/**
* Scope a query to only include persons with given job id.
*
* @return \Illuminate\Database\Eloquent\Builder
*/
public function scopeHasJob($query, $jobId)
{
return $query->where('jobs', 'like', "%\"{$jobId}\"%");
}
作用域名称 hasJob 可能会干扰父 QueryBuilder 方法 has,因此您可能必须为它想出一个不同的名称。
现在您可以使用Person::hasJob($job->id)。但是,与其将工作 ID 作为数组存储在列中,不如考虑创建数据透视表来映射人员与工作之间的关系。您可以使用 php artisan 执行此操作:
php artisan generate:pivot persons jobs
php artisan migrate
然后你需要将关系添加到你的 Person 模型中:
/**
* The person's jobs
*/
public function jobs()
{
return $this->belongsToMany('App\Job');
}
所以你可以像这样通过 Job 查询你的 Person 模型:
Person::whereHas('jobs', function ($query) {
return $query->whereId($job->id);
});