我想在Laravel(有效的sqlite查询)中做类似的事情:
select * from 'tbUsers' where length(name)>50;
我试过
User::with('Permissons')->where('LENGTH(name)','>','50')->get();
但似乎没有工作........
注意:其他查询无问题:
User::with('Permissons')->where('active','=','1')->get();
答案 0 :(得分:14)
试试这个
whereRaw( string $sql, array $bindings = array(), string $boolean = 'and')
User::with('Permissons')->whereRaw('LENGTH(name) > 50')->get();
答案 1 :(得分:3)
使用whereRaw
:
User::with('Permissons')->whereRaw('LENGTH(name) > ?', [50])->get();
答案 2 :(得分:1)
在测试中,您尝试过Testing
,但这会转换为字符串,这意味着select语句变得更像:
'LENGTH(name)'
哪个不好。为了停止将其视为字符串,您需要让where()知道您输入的是原始sql,您可以使用select * from 'tbUsers' where 'LENGTH(name)' > 50;
:
DB::raw
答案 3 :(得分:0)
不是使用简单的LENGTH(name)
,而是使用char_length(name)
来获取字符串中字符的长度。 LENGTH()
返回以字节为单位的字符串长度。 CHAR_LENGTH()
返回以字符为单位的字符串长度。
例如:
LENGTH('déjà vu') => 9
CHAR_LENGTH('déjà vu') => 7