Свойство [] не существует, относится ко многим основным отношениям - PullRequest
0 голосов
/ 03 июля 2018

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

Модель пользователя

class Users extends Model
{

    protected $table = 'users';

    public function contacts(){
        return $this->belongsToMany('App\Models\Contacts', 'user_contacts', 'user_id', 'contact_id');
    }

}

контакты Модель

class Contacts extends Model
{
    protected $table = 'contacts';
}

user_contacts Таблица

id | user_id | contact_id
1  |       1 |        1

Таблица пользователей

id | Name 
1  | Jim Bliggs

стол контактов

id | Name       | Telephone
1  | Joe Bloggs | 0 111 1111

Я могу сохранить, используя отношения вроде как

$user->contacts()->save($newContact);   

Но всякий раз, когда я пытаюсь получить все контакты для пользователя, чтобы просмотреть их, как это

$users = Users::all();
dd($users->contacts);

Просто возвращается

Свойство [Контакты] не существует в этом экземпляре коллекции.

Извините, если это простой вопрос, но я не могу понять, как я могу создать, используя отношения, но я не могу читать?

Ответы [ 2 ]

0 голосов
/ 03 июля 2018
$users = Users::all();

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

foreach ($users as $user) {
    dump($user->contacts);
}

Чтобы решить проблему с запросом N + 1, вы можете нетерпеливо загрузить контакты пользователя

$users = User::with('contacts')->get();

foreach ($users as $user) {
    dump($user->contacts);
}
0 голосов
/ 03 июля 2018

Вы должны определить обратное для модели контакта:

class Contacts extends Model
{
    protected $table = 'contacts';

    public function users(){
        return $this->belongsToMany('App\Models\Users', 'user_contacts', 'contact_id', 'user_id');
    }
}

А для доступа к контактам пользователей необходимо зациклить коллекцию:

foreach ($users as $user) {
    // $user->contacts
}

// using higher order proxy
$users->each->contacts
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...