无法获得类似条件的完整查询Laravel 6.5.2
我正在使用Laravel Framework 6.5.2构建一个网站。 但是我对查询生成器有一个问题。 我尝试了“where like”条件,但它不起作用无法获得类似条件的完整查询Laravel 6.5.2,laravel,query-builder,Laravel,Query Builder,我正在使用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 ?" 为什么会发生这种情况?如何解决这个问
$query = Order::where('customer_name', 'LIKE', '%Jone%');
print_r($query->toSql());
// this returns "select * from orders where customer_name LIKE ?"
为什么会发生这种情况?如何解决这个问题?请试试这个
你错过了get()代码>
或
我不确定这里是否真的出了什么问题。要理解为什么,考虑那些准备好的语句(这是Laravel在引擎盖下使用的)在应用程序代码中实际上没有被评估。相反,带有绑定参数的语句被发送到MySQL数据库并在那里进行计算。因此,你准备好的声明应该是这样的:
select * from orders where customer_name like ?
现在,关于您的查询是否逻辑正确,或者是否存在其他问题,是另一个问题,但您所做的任何事情本身都没有显示出我们的错误。Laravel使用了准备好的语句。它们是一种编写SQL语句的方法,无需将变量直接放入SQL字符串中。您看到的?
是信息的占位符或绑定,稍后将被PDO替换并自动清除。有关准备好的语句的更多信息,请参见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', 'LIKE', '%Jone%')->get();
dd(\DB::getQueryLog()); // Show results of log
谢谢你的关注。事实上,这种方法是我第一次尝试的。但因为它不起作用,我尝试了上面的方法。这并不能真正回答问题。$query=Order::where('customer_name','LIKE','%Jone%')->get();打印(查询);对你有用吗?获取方法?是的,谢谢。如果没有get()方法,$query->toSqI()函数不会返回完整的sql
$query = Order::where('customer_name', 'LIKE', '%Jone%');
dd($query->toSql(), $query->getBindings());
\DB::enableQueryLog(); // Enable query log
$query = Order::where('customer_name', 'LIKE', '%Jone%')->get();
dd(\DB::getQueryLog()); // Show results of log