【问题标题】:Convert SQL query to Eloquent Laravel将 SQL 查询转换为 Eloquent Laravel
【发布时间】:2015-01-20 15:32:02
【问题描述】:

我有一个 sql 查询:

select `id` from `users` 
where (
        select count(*) 
        from `user_event` as `uev` 
        where `uev`.`leader_id` = `users`.`id`
      ) > 1

如何将其转换为 Eloquent Laravel?

【问题讨论】:

    标签: php sql laravel eloquent


    【解决方案1】:

    假设您已经建立了关系,您可以为此使用has() 方法:

    $users = User::select('id')->has('events', '>', 1)->get();
    

    如果您想要一组用户 ID(因为您只选择 ID),您也可以使用 lists():

    $ids = User::has('events', '>', 1)->lists('id');
    

    既然你问了,这将是一种替代方法(虽然没有测试)

    User::where(DB::raw('1'), '<', function($q){
        $q->from('user_event')
          ->where('user_event.leader_id', 'users.id');
    })->get();
    

    【讨论】:

    • 太棒了。非常感谢你 !!!。假设我不使用has。你还有其他方法吗?
    • 不客气。也许有一些原始查询,但这不再是真正的 Eloquent 了 ;) 如果您仍然使用 Eloquent,我认为没有理由不使用 has..
    • 我正在学习 Query Builder 和 Eloquent,所以你能给我原始的查询吗?再次感谢您的帮助。
    • 我收到一个错误:QLSTATE[21000]: Cardinality violation: 1241 Operand should contain 1 column(s)
    • 嗯。好的,那么它可能不会那样工作...如果您发现了什么,请随时提出修改建议
    猜你喜欢
    • 2020-10-03
    • 2015-02-24
    • 1970-01-01
    • 2019-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-31
    相关资源
    最近更新 更多