laravel - 如何在 sql 数组 laravel 中找到项目
问题描述
我正在尝试按 id 查找项目,但我的列是逗号分隔的字符串(下面的屏幕截图中的primaryCategory)。当通过任何字符串(即 50、20、41 等)查询时,我想在结果中获取此字段。
我知道可能有 whereIn、whereHas 等选项,但无法找到正确的语法。请帮我解决一下这个。
解决方案
对于该任务,使用逗号分隔的字符串是不好的做法,最好创建一个新表。但是对于您的结构,使用 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
函数来查找具有特殊类别的模型。
推荐阅读
- java - Jetty 11. 使用 Godaddy 证书的安全连接失败
- html - CSS边框属性为边框添加了几层
- jquery - Jquery:如何在一串文本中查找单独的数字集并向它们添加href标签
- arrays - 在 Fauna db 中过滤嵌套的文档树?
- javascript - 在 JavaScript 中将 Json 对象解析为二维数组
- google-cloud-platform - Terraform 试图覆盖我已经创建的 gcp 资源组,同时尝试创建另一个资源组
- storage - 如何为 ceph 集群运行管理器守护进程?
- c++ - 关于 std::random_shuffle 对向量进行洗牌的说明
- java - 从另一个类的 ArrayList 中删除一个对象
- php - json格式的通道中的Laravel日志错误