【问题标题】:Laravel 5.4 Eloquent relationship sortingLaravel 5.4 Eloquent 关系排序
【发布时间】:2017-08-22 15:46:28
【问题描述】:

我有两个名为可交付成果和可交付成果版本的数据库表。

Deliverable hasMany Deliverable_Version。

Deliverable有id列,模型有获取最新版本的功能:

public function getRecentVersion()
    {
        $deliverable_version_max = $this->versions()->max('version');

        $deliverable_version = DeliverableVersion::where([
            'version'=>$deliverable_version_max,
            'deliverable_ID'=>$this->id,
        ])->first();

        return $deliverable_version;
    }

Deliverable_version 表有 id、deliverable_ID、title、message、deadline、version、created_at、updated_at。

我将如何执行我可以执行的操作:

  1. 获取所有交付物以及与交付物关联的最新版本。

  2. 按照deliverable_version表的列(updated_at)对可交付成果进行排序

  3. 对结果进行分页?

这是我的尝试,但它不起作用,因为它在我加入表格时选择所有版本,而不仅仅是最近的版本:

$deliverables = Accounts::find($owner_account_ID)->deliverables();
    $deliverables = $deliverables->join('deliverable_version', 'deliverable.id', '=', 'deliverable_version.deliverable_ID');
    $deliverables = $deliverables->search($search);
    $deliverables = $deliverables->orderBy('deliverable_version.updated_at', 'desc');
    $deliverables = $deliverables->paginate(4);

感谢任何帮助。谢谢。

【问题讨论】:

  • 添加您的模型文件以获得更好的答案。
  • 好的,模型文件已经添加完毕。

标签: php laravel laravel-5 eloquent


【解决方案1】:
in Accounts module add:

 public function deliverable_version(){
        return $this->hasMany('App\deliverable_version');
    }

in controller:

    enter code here

$deliverables = Accounts::find($owner_account_ID)->deliverables()>with('deliverable_version');
foreach($deliverables as $deliverable){
// last version
$deliverable = $deliverables->deliverable_version->last();

}

【讨论】:

  • 好的,我找到最新版本没有问题。问题是找到最近的版本,按“updated_at”列排序,然后分页。
  • return $this->hasMany('App\deliverable_version')->orderBy('updated_at');
【解决方案2】:
in Accounts module add:

 public function deliverable_version(){
        return $this->hasMany('App\deliverable_version')->orderBy('update_at');
    }

in controller:


$deliverables = Accounts::find($owner_account_ID)->deliverables()>with('deliverable_version');
foreach($deliverables as $deliverable){
// last version
$deliverable = $deliverables->deliverable_version->last();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-05
    • 2017-10-17
    • 2021-01-25
    • 2014-06-25
    • 2021-07-14
    • 2017-07-12
    • 1970-01-01
    相关资源
    最近更新 更多