Laravel - как сделать вложенных пользователей уникальными - PullRequest
0 голосов
/ 02 июля 2018

прежде чем я действительно начну ненавидеть php и laravel, я попрошу о помощи

Я пытаюсь создать уникальные ценности пользователей, которые являются частью моей коллекции предложений.

Эта коллекция сделана по модели пользователя:

public function users(){
    return $this->belongsToMany(User::class, 'messages', 'offer_id', 'from');
}

А в контроллере:

    $user_id = auth()->user()->id;
    $offers = Offer::where('user_id', $user_id)->orderBy('created_at','desc')->get();
    foreach ($offers as $offer)
    {
        $offer->users;
    }
    return $offers;

Это как-то (?) Дает мне правильный результат с вложенными «пользователями» внутри моей коллекции предложений.

OFFER_TITLE : (...)

Пользователи : Array (3) 0 : {...} 1 : {...} 2 : {...}

И это правильный результат, за исключением того, что пользователи дублируют друг друга, поскольку один пользователь может отправлять несколько сообщений. Вот почему я пытаюсь сделать их уникальными таким образом:

    foreach ($offers as $offer)
    {
        $offer->users = $offer->users->unique()->values()->all();
    }
    return $offers;

но это не работает вообще. Я перепробовал много конфигураций. Как я могу это исправить?

1 Ответ

0 голосов
/ 02 июля 2018

$offer->users устанавливает атрибут, вы должны использовать setRelation():

$offer->setRelation('users', $offer->users->unique());

Кроме того, вы должны использовать стремительную загрузку для улучшения производительности:

$offers = Offer::where('user_id', $user_id)
    ->orderBy('created_at', 'desc')
    ->with('users')
    ->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...