2016-03-30 9 views
0

は、このコードを検討: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 

私はget()に上toSql()を変更する場合は、Laravelを返します関連するレコード。

これまでのところ、とても良いです。

私はJohn%Anthony$searchの値を変更して再度上記のコードを実行した場合次に、LaravelはこのSQLを生成します:

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

私は、MySQLに直接このクエリを実行すると、それが正常に動作し、関連を返します。行。しかし、Laravel(V5.2)は、私がget()toSql()を変更すると、私はこのエラーが出るので、それを好きにいないようです:

UnexpectedValueException in Response.php line 397: 

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

にそれを変更してみてください: 'whereRaw( "?% 'のような、users.lastName) '(CONCAT(users.firstName、' %')"、[$検索]) ' –

答えて

0

が判明し、エラーはMySQLではBLOBフィールドのデータによって引き起こされました表。彼らのBLOBフィールドに引用符が含まれていないため、最初のレコードセットには表示されませんでした。ただし、2番目のレコードセットの場合、BLOBフィールドにはレコードの1つに二重引用符があり、それがそれをスローしていました。

0

使用この:

User::hydrateRaw(select * from `users` 
where (CONCAT(users.firstName, ' ', users.lastName) like '%$search%') 
limit 20) 
関連する問題