За последние 24 часа нас посетили 17848 программистов и 1568 роботов. Сейчас ищут 1128 программистов ...

Отношения в Eloquent

Тема в разделе "Laravel", создана пользователем Anaksagor, 15 май 2018.

Метки:
  1. Anaksagor

    Anaksagor Активный пользователь

    С нами с:
    21 ноя 2017
    Сообщения:
    21
    Симпатии:
    0
    Здравствуйте.

    Есть у меня две модели User и Room: 1 пользователь может принадлежать к многим комнатам и в одной комнате может быть много пользователей.

    User.php
    PHP:
    1. public function rooms()
    2.     {
    3.         return $this->belongsToMany(Room::class)->withTimestamps();
    4.     }
    Room.php
    PHP:
    1. public function users()
    2.     {
    3.         return $this->belongsToMany(User::class)->withTimestamps();
    4.     }
    Вывести все комнаты, в которых находится текущий залогиненный пользователь легко:
    PHP:
    1. auth()->user()->rooms()->get()
    . Но не знаю, как получить пользователей, которые находятся в комнатах, в которых находится залогиненный пользователь?
    PHP:
    1. auth()->user()->rooms()->users
    не работает.

    Код (Text):
    1. >>> auth()->user()->rooms()->users
    2. PHP Notice:  Undefined property: Illuminate\Database\Eloquent\Relations\BelongsToMany::$users on line 1
    3. >>> auth()->user()->rooms()->users()
    4. BadMethodCallException with message 'Method Illuminate\Database\Query\Builder::users does not exist.'
    5. >>>
    Заранее спасибо за любую помощь.
    .
     
  2. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.583
    Симпатии:
    1.761
    Сделай запрос руками, быстрее будет. А так, только циклом по rooms пройтись. ORM не избавляет на 100 от написания SQL-запросов
    --- Добавлено ---
    PHP:
    1. $usersInRooms = User::query()->join("room_user", "room_user.user_id=users.id")->whereIn("room_id", auth()->user()->rooms()->get()->pluk("id"))->get();
    Что-то в этом роде, если нигде не ошибся.
     
    acho и Anaksagor нравится это.
  3. Anaksagor

    Anaksagor Активный пользователь

    С нами с:
    21 ноя 2017
    Сообщения:
    21
    Симпатии:
    0
    Спасибо, сделаю вручную.