我正在使用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 ?"
为什么会这样?以及如何解决这个问题?
我正在使用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 ?"
为什么会这样?以及如何解决这个问题?
请尝试这个
您错过了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
要查看将被替换为查询字符串的数据,可以按如下所示在查询上调用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