我有两个模型客户,联系,具有以下关系:
// Customer Model
public function contacts() {
return $this->hasMany('Contact', 'customer_id')
}
联系人看起来像这样:
id | created_at | body | customer_id
1 | 2018-01-03 | text | 1
2 | 2018-01-01 | text | 2
3 | 2017-12-25 | text | 1
4 | 2017-10-13 | text | 2
5 | 2017-10-03 | text | 2
现在,我想创建一个包含所有客户列表的视图,包括每位客户的最新联系人,每位客户只有一行。看起来应该是这样的:
Customer ID | Name | Last Contact Date
1 | John | 2018-01-03
2 | Max | 2018-01-01
... | ... | ...
我已经尝试用类似
的方式实现这一目标// Customer Model
public function contactsList () {
return $this->contacts()
->leftJoin('contacts', 'customers.id', '=', 'contacts.customer_id')
->groupBy('customer.id')
->orderByRaw('contacts.created_at desc');
}
但这不是我的预期。有人可以帮我这个吗?
非常感谢!
答案 0 :(得分:2)
要使其有效,您需要Customer
模型中的create a new hasOne()
relationship:
public function latestContact()
{
return $this->hasOne(Contact::class)->latest();
}
然后使用它:
$customersWithLatestContact = Customer::with('latestContact')->get();