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以及其他有类似问题的用户有用。非常干净。非常感谢。