【问题标题】:Laravel Eloquent relationship orderby issueLaravel Eloquent 关系排序问题
【发布时间】:2015-07-05 10:31:40
【问题描述】:

我有一个包含许多 Action 的 Objective 模型,每个 Action 都有一个 ActionYear。已经在模型中定义。

如何使用orderby通过action_year的具体列对object中的action进行排序。

$query = Objective::with('actions.actionYear')
            ->orderBy('action_year.created_at')
            ->get();

这是由于错误Undefined table: 7 ERROR: missing FROM-clause entry for table "action_year"。 如何解决这个问题。谢谢。

【问题讨论】:

    标签: php orm eloquent laravel-5


    【解决方案1】:

    您可以使用闭包订购预先加载的模型:

    $query = Objective::with(['actions.actionYear' => function($q){
        $q->orderBy('action_year.created_at');
    })->get();
    

    【讨论】:

    • 还是有同样的问题。
    • 是的action_year。我有三层objective -> action -> action_year
    • 没有订单就可以工作吗?只是Objective::with('actions.actionYear')->get();
    【解决方案2】:

    如果你使用 with() 函数,那么这只会确保命名关系也被加载,以避免以后额外需要 SQL 查询。否则与Objective::all()相比,它不会引入任何额外的变化

    实现排序集合的一种方法是在加载数据后使用sortBy()函数

    $query = $query->sortBy(function($objective){
        return $objective->actionYear->created_at;
    });
    

    【讨论】:

      猜你喜欢
      • 2015-06-27
      • 1970-01-01
      • 2017-08-22
      • 2017-04-28
      • 1970-01-01
      • 2021-01-25
      • 2014-06-25
      • 2016-09-20
      • 1970-01-01
      相关资源
      最近更新 更多