Laravel Eloquent加入,但只显示关系中的最大行

时间:2018-02-16 07:51:32

标签: laravel join eloquent

我有两个模型客户联系,具有以下关系:

// 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');
}

但这不是我的预期。有人可以帮我这个吗?

非常感谢!

1 个答案:

答案 0 :(得分:2)

要使其有效,您需要Customer模型中的create a new hasOne() relationship

public function latestContact()
{
    return $this->hasOne(Contact::class)->latest();
}

然后使用它:

$customersWithLatestContact = Customer::with('latestContact')->get();