首页 > 解决方案 > Laravel orderby 与关系

问题描述

我正在尝试使用带有 OrderBy 函数的关系方法按每个级别对学生列表进行排序,但不幸的是,我无法让它工作,知道我的代码中缺少什么?

注意: 每次我删除订单时,我的代码都会起作用,但学生级别不会相应地安排

控制器:

$students=Student::with('level')->where(['status' => 'ENROLLED'])->get()->orderBy('level_name','asc');

看法

<table>
        <tr>
            <th>Name</th>
            <th>Level</th>
        </tr>
         @foreach($students as $std)
        <tr>

              <td>
                    {{$std->student_name}}

              </td>  
             <td>
                 @foreach($std->level as $lv)
                   {{$lv->level_name}}
                 @endforeach
             </td>

        </tr>
         @endforeach
    </table>

标签: phplaravel

解决方案


您不能按关系排序,因为在引擎盖下 laravel 会在引擎盖下进行两个单独的查询。

您可以改为使用join类似这样的东西(请注意我猜到了您的表名,因此您可能必须更新它们)。

$users = Student::join('levels', 'students.level_id', '=', 'levels.id')
  ->orderBy('levels. level_name', 'asc')->select('students.*')->paginate(10);

推荐阅读