我在我的模型Person
中有一個字段,名爲jobs
,我將其轉換爲數組。 jobs
是與作業表相關的ID數組。我希望能夠查詢Person並返回所有在他們的作業數組中有特定ID的內容。我看到Laravel有一個whereIn
子句,用於檢查數據庫值是否在數組中,但我需要相反的方法 - 檢查數據庫數組是否包含值。Laravel - 如何查詢數組中的數組字段是否包含值
我堅持不得不使用where('jobs', 'like', '%"' . $job_id . '"%')
?
我在我的模型Person
中有一個字段,名爲jobs
,我將其轉換爲數組。 jobs
是與作業表相關的ID數組。我希望能夠查詢Person並返回所有在他們的作業數組中有特定ID的內容。我看到Laravel有一個whereIn
子句,用於檢查數據庫值是否在數組中,但我需要相反的方法 - 檢查數據庫數組是否包含值。Laravel - 如何查詢數組中的數組字段是否包含值
我堅持不得不使用where('jobs', 'like', '%"' . $job_id . '"%')
?
我不知道有一個相反然而,如果你只是希望使查詢了一下更具可重用性,你可以通過添加給你的人的模型,使其局部範圍:
/**
* 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工匠:
php artisan generate:pivot persons jobs
php artisan migrate
然後,你需要的關係添加到您的Person模型:
/**
* The person's jobs
*/
public function jobs()
{
return $this->belongsToMany('App\Job');
}
所以,你可以通過這樣的招聘查詢您的Person模型:
Person::whereHas('jobs', function ($query) {
return $query->whereId($job->id);
});