无法获得类似条件Laravel 6.5.2的完整查询

我正在使用Laravel Framework 6.5.2构建网站。 但是我对查询生成器有问题。 我尝试了“ where like”条件,但它不起作用。

$query = Order::where('customer_name','LIKE','%Jone%');
print_r($query->toSql());
// this returns "select * from orders where customer_name LIKE ?"

为什么会这样?以及如何解决这个问题?

A19900919woaijisuanj 回答:无法获得类似条件Laravel 6.5.2的完整查询

请尝试这个

您错过了get();

$term = "Jone";
$query = Order::where('customer_name','%' . $term . '%')->get();

$query = Order::where('customer_name','%' . Input::get('name') . '%')->get();
,

我不确定这里是否真的有什么问题。要了解原因,请考虑在应用程序代码中并未实际评估准备好的语句(这是Laravel在后台使用的语句)。而是将带有绑定参数的语句发送到MySQL数据库并在那里进行评估。因此,您准备好的语句应该看起来像这样:

select * from orders where customer_name like ?

现在,关于您的查询在逻辑上是否正确,或者是否存在任何其他问题,是另一个问题,但是您没有向我们展示的内容本身看起来是错误的。

,

Laravel使用预处理语句。它们是一种编写SQL语句的方法,而无需将变量直接放入SQL字符串中。您看到的?是信息的占位符或绑定,以后将由PDO替换并自动清除。有关准备好的语句http://php.net/manual/en/pdo.prepared-statements.php

的更多信息,请参见PHP文档。

要查看将被替换为查询字符串的数据,可以按如下所示在查询上调用getBindings()函数。

$query = Order::where('customer_name','LIKE','%Jone%');

dd($query->toSql(),$query->getBindings());

绑定数组的替换顺序与?在SQL语句中出现的顺序相同。

或者获取绑定数据的另一种方法是

\DB::enableQueryLog(); // Enable query log

$query = Order::where('customer_name','%Jone%')->get();

dd(\DB::getQueryLog()); // Show results of log
本文链接:https://www.f2er.com/3031738.html

大家都在问