Php Laravel-如何查询数据库中的数组字段是否包含值
在我的模型Php Laravel-如何查询数据库中的数组字段是否包含值,php,mysql,arrays,laravel-5,Php,Mysql,Arrays,Laravel 5,在我的模型Person中有一个名为jobs的字段,我将其转换为数组作业是与作业表相关的ID数组。我希望能够查询Person并返回其jobs数组中具有特定id的所有对象。我看到Laravel有一个where子句,它检查一个数据库值是否在数组中,但我需要相反的-检查一个数据库数组是否包含一个值 我是否不得不使用where('jobs'、'like'、“%”、$job_id.“%”)?我不确定是否存在相反的情况。但是,如果您只是想让查询更具可重用性,您可以将其添加到您的个人模型中,使其成为本地范围:
Person
中有一个名为jobs
的字段,我将其转换为数组<代码>作业是与作业表相关的ID数组。我希望能够查询Person并返回其jobs数组中具有特定id的所有对象。我看到Laravel有一个where
子句,它检查一个数据库值是否在数组中,但我需要相反的-检查一个数据库数组是否包含一个值
我是否不得不使用
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}\"%");
}
/**
* The person's jobs
*/
public function jobs()
{
return $this->belongsToMany('App\Job');
}
作用域hasJob
的名称可能会干扰父QueryBuilder方法has
,因此您可能必须为其指定一个不同的名称
现在您可以使用Person::hasJob($job->id)
。然而,与其将列中的作业ID存储为数组,不如考虑创建一个数据透视表来映射人和作业之间的关系。可以使用php artisan执行此操作:
php artisan生成:pivot persons作业
php artisan迁移
然后,您需要将关系添加到您的个人模型中:
/**
* 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}\"%");
}
/**
* The person's jobs
*/
public function jobs()
{
return $this->belongsToMany('App\Job');
}
因此,您可以按职务查询您的个人模型,如下所示:
Person::whereHas('jobs', function ($query) {
return $query->whereId($job->id);
});
$category_id=1,2,3,。。。;
$category\u id=$\u POST['category\u id'];
$myArray=explode(“,”,$category_id);
$data=DB::table('tablename')->select('*')->其中('catcode',$myArray)->get();
Laravel包括whereJsonContains():
因此您的字段jobs
需要
正在转换为数组,可以查询为:
这样对我来说很有效
不知道
generate:pivot
函数,非常有用!对于堆栈溢出,不鼓励使用仅代码的答案,因为它们没有解释堆栈溢出是如何解决问题的。请编辑您的答案,解释此代码的作用以及它如何回答问题,以便对OP以及其他有类似问题的用户有用。非常干净。非常感谢。