【问题标题】:Execute prepared raw SQL in Laravel在 Laravel 中执行准备好的原始 SQL
【发布时间】:2015-12-12 23:28:02
【问题描述】:

我有一张这样的两张桌子:

table1:

 user_id  |  fistname  |  lastname
 ----------------------------------
    1           Foo         Foob
    2           Bar         Barb

table2:

 user_id  |  date
 ---------------
    1         timestamp
    2         timestamp
    1         timestamp
    1         timestamp
    2         timestamp

我想加入table1table2,而table2user_id分组的行数,所以最终结果应该是这样的:

 user_id  |  fistname  |  lastname   |    hitcount
 -------------------------------------------------
    1           Foo         Foob            3
    2           Bar         Barb            2

在原始 SQL 中做这样的事情很容易,但我不知道如何在 Laravel 中做到这一点。

出于安全原因,我想使用准备好的 SQL。

【问题讨论】:

标签: php mysql laravel laravel-5


【解决方案1】:
Table1::Join('Table2', function ($join){
                $join->on('table1.user_id', '=', 'table2.user_id')
            })->groupBy('table2.user_id)  
              ->get([
                    'table1.user_id',
                    'table1.firstname',
                    'table1.lastname',
                ]);

【讨论】:

    【解决方案2】:

    您需要在模型中定义表关系。

    你解释的是one to many关系。

    您可以在此处阅读有关如何定义关系和使用 eloquent 创建正确查询的更多信息。

    http://laravel.com/docs/5.1/eloquent-relationships#one-to-many

    【讨论】:

      【解决方案3】:

      基本上,您可以将原始 SQL 转换为 Laravel 代码,如下所示:

      DB::table('table1')
      ->join('table2', 'table1.user_id','=','table2.user_id')
      ->select('table1.user_id','table1.firstname', 'table1.lastname',DB::raw('count(table2.user_id) as hitcount')
      ->groupBy('table2.user_id')->get();
      

      【讨论】:

        猜你喜欢
        • 2010-11-08
        • 2020-03-15
        • 2013-06-28
        • 2010-11-06
        • 1970-01-01
        • 2013-07-14
        • 2013-12-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多