首页 > 解决方案 > 如何在 sql 数组 laravel 中找到项目

问题描述

我正在尝试按 id 查找项目,但我的列是逗号分隔的字符串(下面的屏幕截图中的primaryCategory)。当通过任何字符串(即 50、20、41 等)查询时,我想在结果中获取此字段。

我知道可能有 whereIn、whereHas 等选项,但无法找到正确的语法。请帮我解决一下这个。

在此处输入图像描述

标签: laravellaravel-6

解决方案


对于该任务,使用逗号分隔的字符串是不好的做法,最好创建一个新表。但是对于您的结构,使用 func 的这种方式FIND_IN_SET是合适的: https ://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_find-in-set

$categories = [1,2,3];

$queryParts = [];
foreach($categories as $category) {
    $queryParts[] = 'FIND_IN_SET("' . $category . '", `primaryCategory`)';
}

$query = implode(' OR ', $queryParts);

$list = Model::whereRaw($query)->get();

UPD 右解决方案

使用 *ToMany 关系:

https://laravel.com/docs/8.x/eloquent-relationships#one-to-many https://laravel.com/docs/8.x/eloquent-relationships#many-to-many

您必须创建一个新表:model_categories并将model_id. category_id每个模型可以有多个类别,反之亦然,然后您可以使用标准的 laravelwhereHas函数来查找具有特殊类别的模型。


推荐阅读