【问题标题】:Eloquent: Query the length of field in LaravelEloquent:在 Laravel 中查询字段的长度
【发布时间】:2016-05-24 09:49:31
【问题描述】:

我想在 Laravel 中做类似的事情(有效的 sqlite 查询):

select * from 'tbUsers' where  length(name)>50;

我试过了

User::with('Permissons')->where('LENGTH(name)','>','50')->get();

但是好像不行........

注意:其他查询没有问题:

User::with('Permissons')->where('active','=','1')->get();

【问题讨论】:

标签: php laravel laravel-5 eloquent


【解决方案1】:

试试这个 whereRaw( string $sql, array $bindings = array(), string $boolean = 'and')

User::with('Permissons')->whereRaw('LENGTH(name) > 50')->get();

【讨论】:

    【解决方案2】:

    使用whereRaw:

    User::with('Permissons')->whereRaw('LENGTH(name) > ?', [50])->get();
    

    【讨论】:

    • 我不明白原因,但您的解决方案对我不起作用。我正在使用@vijaykumar 提供的解决方案。
    • 我认为这个带有绑定变量的更正确。
    • @iateadonut 如果您允许用户输入,它会更安全。对于文字的硬编码值,它们同样正确。
    【解决方案3】:

    在您的测试中,您尝试了'LENGTH(name)',但这会转换为字符串,这意味着选择语句变得更像:

    select * from 'tbUsers' where 'LENGTH(name)' > 50;
    

    这很糟糕。为了停止将其视为字符串,您需要让 where() 知道您输入的是 raw-sql,为此您可以使用 DB::raw:

    User::with('Permissons')->where(DB::raw('LENGTH(name)'),'>','50')->get();
    

    【讨论】:

      【解决方案4】:

      不要使用简单的LENGTH(name),而是使用char_length(name) 来获取字符串中字符的长度。 LENGTH() 返回以字节为单位的字符串长度。 CHAR_LENGTH() 返回以字符为单位的字符串长度。

      例如:

      LENGTH('déjà vu')  => 9
      CHAR_LENGTH('déjà vu') => 7
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-11-11
        • 2020-01-31
        • 2017-10-22
        • 2015-02-13
        • 1970-01-01
        • 2017-06-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多