gpt4 book ai didi

php - Laravel 查询生成器原始 AND 语句

转载 作者:行者123 更新时间:2023-11-29 02:17:42 25 4
gpt4 key购买 nike

我需要在 Laravel 中运行原始 SQL 查询部分。

原始 SQL 看起来基本上是这样的:

AND (forretningsadresse_fylke = 'HEDMARK' 
AND (forretningsadresse_kommune = 'HAMAR')
OR (forretningsadresse_kommune = 'ELVERUM')
)
OR (forretningsadresse_fylke = 'HORDALAND'
AND (forretningsadresse_kommune = 'BERGEN')
)

我尝试使用:

$result = Company::where(function($a) use($input, $sql) {

// Name or keywords LIKE string
$a -> where('navn', 'LIKE', '%'. $input['query_string'] .'%');
$a -> where('keywords', 'LIKE', '%'. $input['query_string'] .'%');
if (!empty($sql)) {
$a -> where(DB::statement($sql));
}

});

$result = $result -> take($input['limit']) // Take $limit
-> offset($input['offset']) // Offset by $offset
-> orderBy('rank', 'DESC') // Sponsors first
-> get();

但它不起作用。请参阅下面的错误。我怎样才能让它发挥作用?提前致谢!

Connection.php 第 673 行中的 QueryException:SQLSTATE[42000]:语法错误或访问冲突:1064 您的 SQL 语法有误;检查与您的 MariaDB 服务器版本对应的手册,了解在第 1 行的“AND (forretningsadresse_fylke = 'AKERSHUS')”附近使用的正确语法 (SQL: AND (forretningsadresse_fylke = 'AKERSHUS') )

编辑:该表有 100 万行,我使用此方法创建原始查询:http://i.imgur.com/Q5SRP58.png

最佳答案

您的代码有两个问题:

  1. 您正在使用 DB::statement,而您应该使用 DB::rawDB::statement 将执行您作为参数传递的字符串,而这不是您需要的。您需要传递要包含在查询构建器中的原始语句。
  2. 假设您发布的原始 block 是 $sql 参数,那么您需要删除开始的 AND,否则查询将以 .. .. 和 AND (,这将引发错误。

鉴于此,您需要将代码更新为:

// Notice the removal of the `AND`
$sql = "(forretningsadresse_fylke = 'HEDMARK'
AND (forretningsadresse_kommune = 'HAMAR')
OR (forretningsadresse_kommune = 'ELVERUM')
)
OR (forretningsadresse_fylke = 'HORDALAND'
AND (forretningsadresse_kommune = 'BERGEN')
)";

$result = Company::where(function($a) use($input, $sql) {
// Name or keywords LIKE string
$a->where('navn', 'LIKE', '%'. $input['query_string'] .'%');
$a->where('keywords', 'LIKE', '%'. $input['query_string'] .'%');
if (!empty($sql)) {
// Using DB::raw instead of DB::statement
$a->where(DB::raw($sql));
}
});

关于php - Laravel 查询生成器原始 AND 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36960632/

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