MySQL似乎很好,但Laravel不喜欢它

时间:2016-03-30 16:16:27

标签: php mysql laravel

考虑以下代码:

$search = "John";

return User::whereRaw("(CONCAT(users.firstName, ' ', users.lastName) like '%$search%')")
             ->take(20)
             ->toSql();

这将生成以下SQL代码:

select * from `users` 
where (CONCAT(users.firstName, ' ', users.lastName) like '%John%') 
limit 20

如果我将上面的toSql()更改为get(),则Laravel会返回相关记录。

到目前为止,非常好。

然后,如果我将$search的值更改为John%Anthony并再次运行上面的代码,Laravel会生成此SQL:

select * from `users` 
where (CONCAT(users.firstName, ' ', users.lastName) like '%John%Anthony%') 
limit 20

如果我直接在MySQL中运行此查询,它可以正常工作并返回相关的行。但是,Laravel(v5.2)似乎不喜欢它,因为当我将toSql()更改为get()时,我收到此错误:

UnexpectedValueException in Response.php line 397:

The Response content must be a string or object implementing __toString(), "boolean" given.

2 个答案:

答案 0 :(得分:0)

事实证明,错误是由MySQL表中BLOB字段中的数据引起的。它没有出现在第一个记录集中,因为它们的BLOB字段不包含引号。但是,对于第二个记录集,BLOB字段在其中一个记录中有一个双引号并且正在抛出它。

答案 1 :(得分:0)

使用它:

User::hydrateRaw(select * from `users` 
where (CONCAT(users.firstName, ' ', users.lastName) like '%$search%') 
limit 20)
相关问题