Как добавить пользовательский элемент в коллекцию пользователей - PullRequest
0 голосов
/ 02 мая 2019

У меня есть пользователи и места. В таблице user_venue я храню несколько соединений (manyToMany)

$rUsers = \DB::table('user_venue')->where('venue_id',$user->id)->get();

$resUsers = collect();

foreach ($rUsers as $key => $i) {
    $id = $i->user_id;
    $u = User::findOrFail($id);
    $resUsers->push($u);
}

Как видите, я хочу сохранить user модель в коллекции $resUser, но она возвращает мне ошибку и не загружает представление ... ЗАЧЕМ?

Ответы [ 2 ]

2 голосов
/ 02 мая 2019

Когда вы $u->push($resUsers), вы пытаетесь вставить в одну User запись / экземпляр. Я считаю, что вы хотели бы сделать следующее:

$resUsers->push($u);

Это будет толкать одну запись User в коллекцию $resUsers.

1 голос
/ 02 мая 2019

Если у вас есть отношение «многие ко многим» и вы хотите загрузить User s, связанные с данным Venue, почему бы вам не использовать отношение?Это более эффективно , потому что вы попадаете в базу данных только один раз, в отличие от вашей фактической стратегии.

# Venue.php

public function users()
{
    return $this->belongsToMany(User::class);
}

Затем в контроллере:

# VenueController.php

public function myFunction(Request $request)
{
    $venue = Venue::find('your-venue-id'); // getting a venue
    $users = $venue->users; // <-----

    return view('users')->with('users', $users);
}

ВПриведенный выше код: переменная $users является экземпляром Collection , она содержит коллекцию User моделей, соответствующих запросу, который, насколько я знаю, является вашим желаемым выводом.

...