Laravel:原始查询设置

时间:2016-12-14 10:13:56

标签: php mysql laravel

我需要一只手以下。

我有一个plates表,其中包含project_idequipment_status_code_id等。

这是我想要实现的目标。

我想查询表并获取结果,就像这样。

 ----------------------------------------------------
| project |    Equipment Status code  | Number of plates
-----------------------------------------------------
| Test    |      Cleaning             |          9 
| Test#2  |      Not Cleand           |          3
|         
-----------------------------------------------------

做这样的事

return   DB::table('plates')
    ->select('project_id', 'equipment_status_code_id', DB::raw('count(*) as total'))
    ->groupBy('project_id','equipment_status_code_id')
    ->pluck('project_id','equipment_status_code_id');

返回

{
  "13": 31,
  "30": 3,
  "": 3
}

但这还不够。我想添加另一个层,就像上面的例子一样,列名。

实现这一目标的最佳方法是什么?

注意:我知道我需要查询模型以获取状态代码的名称,而不是id's

感谢您的时间!

2 个答案:

答案 0 :(得分:0)

尝试此查询

return  DB::table('plates')
    ->join('project', 'plates.project_id', '=', 'project.id')
    ->join('equipment', 'plates.equipment_status_code_id', '=', 'equipment.id')
    ->select('plates.*', 'project.name', 'equipment.equipment_code', DB::raw('count(plates.id) as no_of_plates'))
    ->groupBy('plates.project_id','plates.equipment_status_code_id')
    ->get();

答案 1 :(得分:0)

您可以尝试使用DB::raw("Your SQL statement here");运行这样您可以编写自己的语句,就像在sql中编写一样。

我在模态中的例子:

  public static function getMaxOrder()
    {

        $orderno = DB::select(DB::raw('select order_no from orders where id = (select max(`id`) from orders)'));
        return $orderno[0]->order_no;
    }