首页 > 解决方案 > Laravel - 查询两个具有特殊条件的模型

问题描述

我有两个两个表:

  1. 部门(部门)

    id、dept_code 和 dept_point

  2. 指定(指定)

    id、dept_code、designation_point 和 created_at

我想从指定中选择dept_code、designation_point、created_at。查询应遍历指定表并使用这些条件。

条件

  1. 从 dept_code 不等于 101 和 102 的 designation 中选择所有 dept_code、designation_point 和 created_at

  2. 如果 dept_code = 101 或 dept_code = 101,在指定时,应使用以下条件从指定中选择匹配的 dept_code、designation_point 和 created_at:

department.dept_code = designation.dept_code

部门.部门点=指定.指定点

这是我已经拥有的代码

控制器

        $designations = DB::table('designation as g')
    ->select(
       'g.dept_code', 
       'g.designation_point',
       DB::raw("DATE(created_at) as created_date")
  )
 ->orderByRaw('g.created_at DESC')
            ->get(); 

看法

        @foreach($designations as $key => $designation)
        <tr>
            <td>{{ ++$key }}</td>
            <td>{{ $designation->dept_code }}</td>               
            <td>{{ $designation->designation_point }}</td>
            <td>{{ $designation->created_date }}</td>
        </tr>          
    @endforeach

如何完成Controller中的代码

标签: laraveleloquent

解决方案


I'm not sure what you mean with your second condition. I'll update my answer accordingly.

Using Builder

$designations = DB::table('designations')
  ->select('dept_code', 'designation_point', 'created_at')
  # Condition 1
  ->whereNotIn('dept_code', [101, 102])
  ->orderBy('created_at', 'desc')
  ->get();

Using Eloquent

$designations = App\Designation::select('dept_code', 'designation_point', 'created_at')
  # Condition 1
  ->whereNotIn('dept_code', [101, 102])
  ->orderBy('created_at', 'desc')
  ->get();

推荐阅读