Zub*_*ain 18
Laravel 包含
whereJsonContains():因此jobs您要转换为数组的字段,可以查询为:
->whereJsonContains('jobs', 3)
Run Code Online (Sandbox Code Playgroud)
这种方式对我有用......
我不确定是否存在相反的情况但是如果您只是希望使查询更具可重用性,可以通过将其添加到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}\"%");
}
Run Code Online (Sandbox Code Playgroud)
范围的名称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');
}
Run Code Online (Sandbox Code Playgroud)
所以你可以通过Job查询你的Person模型,如下所示:
Person::whereHas('jobs', function ($query) {
return $query->whereId($job->id);
});
Run Code Online (Sandbox Code Playgroud)