考虑以下代码:
$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.
答案 0 :(得分:0)
事实证明,错误是由MySQL表中BLOB
字段中的数据引起的。它没有出现在第一个记录集中,因为它们的BLOB
字段不包含引号。但是,对于第二个记录集,BLOB
字段在其中一个记录中有一个双引号并且正在抛出它。
答案 1 :(得分:0)
使用它:
User::hydrateRaw(select * from `users`
where (CONCAT(users.firstName, ' ', users.lastName) like '%$search%')
limit 20)