2017-03-29 110 views
1

我有两个数据库表称为交付,并deliverable_version。Laravel 5.4雄辩关系排序

交割的hasMany Deliverable_Version。

交付有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,标题,消息,截止日期,版本, 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); 

任何帮助表示赞赏。谢谢。

+0

添加你的模型文件,以获得更好的答案。 – Saman

+0

好的,模型文件已被添加。 –

回答

0
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(); 

}

+0

好的,我没有发现最后一个版本的问题。问题在于找到最新版本,通过“updated_at”列对其进行排序,然后对其进行分页。 –

+0

return $ this-> hasMany('App \ deliverrable_version') - > orderBy('updated_at'); –

0
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();