Загрузка последней записи отношения hasMany - PullRequest
2 голосов
/ 04 апреля 2020

У меня есть следующий код в моем контроллере, где я пытаюсь загрузить все «члены». Каждый участник может иметь более одного номера телефона. Номера телефонов хранятся в таблице с именем phone_numbers и привязаны к идентификаторам пользователей. Ниже я пытаюсь загрузить последний номер телефона, сохраненный для каждого участника. Обратите внимание, что у пользователя есть связь hasMany на телефоне.

Пользователь. php

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

Это то, что я пробовал:

$members = \App\Model\User::all();
$members->load('phone');

Я ценю любые предложения о том, как это сделать sh.

Ответы [ 3 ]

2 голосов
/ 04 апреля 2020

Чтобы получить последнюю строку, вы можете просто использовать latest и использовать отношение hasOne следующим образом:

public function phone()
{
    return $this->hasOne('App\Model\PhoneNumber')->latest();
}

Таким образом, вы можете получить последнюю версию телефона для всех пользователей:

User::with('phone')->get();
0 голосов
/ 04 апреля 2020

Я не тестировал его, но вы могли бы сделать запрос, подобный следующему:

 $members = User::with(['phone' => function($query) {
        $query->orderBy('created_at', 'desc')->first();
    }]);

Это вернет вам всех пользователей, но пользователи, к которым подключен телефон, будут иметь только последнюю запись создано.

0 голосов
/ 04 апреля 2020

Вы можете достичь этого, выполнив:

в вашей модели пользователя:

/**
     * The accessors to append to the model's array form.
     *
     * @var array
     */
    protected $appends = ['last_phone'];


protected function getLastPhoneAttribute()
{
    return $this->phone()->orderBy('created_at')->first();
}
use App\Model\User;

$lastPhones = User::all()->map->last_phone;
...