如何简化 Laravel ORM

Posted

技术标签:

【中文标题】如何简化 Laravel ORM【英文标题】:How to streamline Laravel ORM 【发布时间】:2016-11-08 10:04:47 【问题描述】:

对不起,这个问题太愚蠢了..

我用的是Controller,有很多ORM,我想精简一下这段代码。

我的控制器

public function news(Request $request)

    $history = Recruitments_status::where('recruitments_status.status',1)->get();
    $history_a =  Recruitments_status::where('recruitments_status.status',2)->get();
    $history_b = Recruitments_status::where('recruitments_status.status',3)->get();  
    $history_c = Recruitments_status::where('recruitments_status.status',4)->get(); 
    $history_d = Recruitments_status::where('recruitments_status.status',5)->get(); 
    $history_e = Recruitments_status::where('recruitments_status.status',6)->get(); 

    return view('pl_sidebar/news',[
          'history' => $history,
          'history_a' => $history_a,
          'history_b' => $history_b,
          'history_c' => $history_c,
          'history_d' => $history_d,
          'history_e' => $history_e
    ]);

如何精简这个 ORM 代码?

【问题讨论】:

您“精简”代码的目的是什么?你觉得哪里不对?你想达到什么目的? @Wader 谢谢你的回复,我的代码很长而且有很多查询,我想精简这段代码.. 【参考方案1】:

您的代码将生成多个查询,这是不好的做法。你可以得到一个集合:

public function news(Request $request)

    return view('pl_sidebar/news', [
        'history' => Recruitments_status::whereIn('status', [1, 2, 3, 4, 5, 6])
    ]);

然后在 Blade 模板中使用这个集合:

@foreach ($history->where('status', 1) as $single)
      $single->status 
      $single->id 
@endforeach

【讨论】:

哦!非常感谢你!这是一个很大的帮助!【参考方案2】:

使用whereIN

  ->whereIn('id', [1, 2, 3])->get();

所以,

 $history = Recruitments_status::whereIn('recruitments_status.status',[1,2,3,4,5,6])->get();

【讨论】:

以上是关于如何简化 Laravel ORM的主要内容,如果未能解决你的问题,请参考以下文章

如何简化 Laravel 查询以按年搜索日期并按月分组

php Laravel:带刀片的简化表格

laravel框架中容器类简化代码-摘自某书

如何使用 Laravel Eloquent 创建子查询?

如何使用 Laravel 的查询构建器执行嵌套连接?

在 Laravel 中,如何在 Route::middleware 组中使用“cannot”?