gpt4 book ai didi

php - 使用未知数量的参数创建 Laravel Eloquent Query

转载 作者:可可西里 更新时间:2023-11-01 07:08:45 25 4
gpt4 key购买 nike

我正在尝试研究如何使用用户输入动态创建 Eloquent 查询,该查询会根据输入的长度更改查询。直接使用 MySQL 这很简单……只需根据用户输入连接一个查询字符串。使用 Eloquent 是不可能的,除非您 a) 使用“原始”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]

最佳答案

您可以将循环中的所有 where 分组到“父级”where 中。

$query = DB::table('mytable');

foreach ($searchWords as $word) {
$query->where(function ($query) use ($word)
{
$query->orWhere('firstname', 'like', '%' . $word . '%');
$query->orWhere('lastname', 'like', '%' . $word . '%');
$query->orWhere('address', 'like', '%' . $word . '%');
});
}

$results = $query->get();

这将产生一个类似于您想要的 SQL 查询。您可以通过打印出 $query->toSql() 来检查原始 SQL 结果。

关于php - 使用未知数量的参数创建 Laravel Eloquent Query,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38841973/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com