我正在尝试使用用户输入动态创建一个Eloquent查询,该输入根据输入的长度更改查询.使用直接
MySQL这很简单……只需根据用户输入连接查询字符串.使用Eloquent是不可能的,除非你要么a)使用’raw’sql查询,这违背了使用Eloquent的目的或b)使用像eval()函数那样高度不健康的东西.
如何迭代未知长度的用户输入并创建一个Eloquent查询,使用’OR’和’AND’的组合在多个字段中搜索单词
考虑以下无法实际工作的伪代码.
$search = "cat sat on the mat";
$searchWords = explode(' ', $search);
$data['finds'] = DB::table('mytable') [... incomplete query]
foreach ($searchWords as $word) {
->where('firstname', 'like', '%' . $word . '%')
->orWhere('lastname', 'like', '%' . $word . '%')
->orWhere('address', 'like', '%' . $word . '%')->AND [... next word]
}
或者只是放弃和使用原始查询?我可以为每个单词运行一个单独的查询,然后使用PHP来合并/操作结果,但这对于在传统MySQL中的一个查询中可以完成的操作来说似乎非常麻烦.
我正在尝试做的传统MySQL查询将是:
SELECT * FROM `mytable`
WHERE (firstame LIKE '%$cat%' OR lastname LIKE '%cat%' OR address LIKE '%cat%')
AND (firstname LIKE '%sat% OR lastname LIKE '%sat%' OR address LIKE '%sat%')
AND [etc, etc, for all words in user input]