我有3个带字段的模型
LEAD
id
first_name
surname
//in lead model
public function trxn()
{
return $this->hasMany('lead_trxn', 'lead_id', 'id');
}
LEAD_TRXN
id
lead_id
create_datetime
expiration_datetime
status
//in lead_trxn model
public function detail()
{
return $this->hasMany('lead_trxn_details', 'lead_trxn_id', 'id');
}
LEAD_TRXN_DETAILS
id
lead_trxn_id
product_id
create_datetime
status
我有这个使用Eager loading
来检索记录$leads = Lead::with(
array
(
'trxn' => function($qry)
{
$qry->with(
array
(
'details'
//i need the last inserted product here
)
);
//i need to order it by expiration date
//$qry->orderBy('expiration_date');
}
)
)->get();
问题1: 我怎样才能在它的动态过滤器中按到期日期或在lead_trxn中的create_datetime对其进行排序?这意味着,如果我将数据绘制成表格,然后单击表格的标题,它将根据我点击的标题对记录进行排序。
问题2: 如何在lead_trxn_details中插入最后一个product_id?
非常感谢您的帮助。谢谢。
答案 0 :(得分:-1)
由于您从用户那里获得了列顺序和方向,因此您需要将列和方向都传递给查询。因此,您可以在闭包内使用orderBy
函数扩展查询。
$leads = Lead::with(array( 'trxn' => function($qry) use($orderByColumn, $direction) {
$qry->orderBy($orderByColumn, $direction)
->with( array ( 'details' => function($q) {
$q->orderBy('create_datetime', 'desc')->first(); // get the latest inserted product
})
);
}
)
)->get();