如何在“AND”条件中使用“OR LIKE”Laravel

Pra*_*nab 5 php mysql laravel laravel-5

我是 Laravel 新手,在获取记录时遇到一些问题。表结构如下:

main_categories
------------------
id      name
1       NNN
2       PPP

categories
-----------------------------------
id      name    main_category_id
-----------------------------------
1       abc         1
2       xyz         2
3       lmn         1

services
------------------
id  categories
------------------
1   a:2:{i:0;s:1:"1";i:1;s:2:"3";}
2   a:1:{i:0;s:3:"2";}
3   a:1:{i:0;s:3:"3";}
4   a:2:{i:0;s:1:"1";i:1;s:3:"3";}
Run Code Online (Sandbox Code Playgroud)

服务中存储的类别以序列化形式。

在表单中,我有根据主类别的下拉菜单,每个下拉菜单中都有子类别。

帖子数据采用以下格式:

数组( [0] => 数组( [0] => 1, [1] => 3, ), [1] => 数组( [0] => 2 ) )

流程 ID 像这样:每个主类别有 5 个下拉菜单,选项是它们的子类别,我想将“OR”条件放在子类别之间或相同的主类别之间,并将“AND”条件与另一组“OR”放在一起其他主要类别的条件。

在原始 SQL 中,我执行以下查询:

SELECT * FROM `services` WHERE (`categories` LIKE '%"1"%' OR `categories` LIKE '%"3"%') AND (`categories` LIKE '%"2"%')
Run Code Online (Sandbox Code Playgroud)

在 Laravel 中我尝试了以下操作:

$categories = [1,3];

\DB::table ('services')
->where(function($q) use ($categories) {
    foreach($categories as $category) {
        $q->where('services.categories', 'like', '%"'.DB::raw($category).'"%');
    }
})
Run Code Online (Sandbox Code Playgroud)

但这是行不通的。如何在 Laravel 中正确完成此操作。

Yad*_*ada 0

我相信您正在寻找orWhere()

orWhere('name', 'like', 'John')
Run Code Online (Sandbox Code Playgroud)