Связывание моделей Eloquent

Сейчас мы с вами разберем связывание моделей Eloquent. Суть связывания в следующем: если у нас есть несколько таблиц, связанных друг с другом, то при запросе к одной из таблиц, Laravel будет вытягивать соответствующие данные из другой.

Пример: есть таблица cities с городами и таблица countries со странами. При этом каждый город принадлежит какой-то стране. В базе данных такая принадлежность задается полем country_id в таблице с городами.

Если использовать чистые SQL запросы, то для получения городов вместе со странами придется использовать JOIN.

Используя возможности фреймворка, получение связанных данных становится очень простым и удобным. Без сомнения, связывание моделей во фреймворках - одно из самых больших преимуществ, позволяющих упростить разработку.

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

Связь Один к одному hasOne

По следующей ссылке изучите раздел Один к одному (до подраздела Создание обратного отношения). Решите затем следующие задачи:

Пусть у вас есть таблица users (пользователи) с полями id, login, password и таблица profiles (профили) с полями id, name (имя), surname (фамилия), email и user_id. Свяжите эти таблицы отношением hasOne.

Получите какого-нибудь пользователя вместе с его профилем.

Получите всех пользователей вместе с их профилями, передайте полученный массив в представление и выведите на экран в виде HTML таблицы table.

Связь Один к одному belongsTo

По следующей ссылке изучите раздел Создание обратного отношения. Решите затем следующие задачи:

Пусть у вас есть таблица users (пользователи) с полями id, login, password, city_id и таблица cities (города) с полями id, name (название города). Свяжите пользователей с городами отношением belongsTo.

Получите какого-нибудь пользователя вместе с его городом.

Получите всех пользователей вместе с их городами, передайте полученный массив в представление и выведите на экран в виде HTML таблицы table.

Сделайте еще таблицу countries (страны) с полями id, name (название страны). В таблицу cities добавьте поле country_id. Свяжите города со странами отношением belongsTo.

Получите все города вместе с их странами.

Получите всех пользователей вместе с их городами и странами этих городов.

Один ко многим hasMany

По следующей ссылке изучите раздел Один ко многим. Решите затем следующие задачи:

Свяжите созданную вами таблицу countries с таблицей cities отношением hasMany.

Получите все страны вместе с их городами.

Один ко многим через hasManyThrough

По следующей ссылке изучите раздел Один ко многим. Решите затем следующие задачи:

Получите всех пользователей вместе с их странами.

Многие ко многим belongsToMany

По следующей ссылке изучите раздел Многие ко многим. Решите затем следующие задачи:

Даны продукты и категории этих продуктов. Пусть продукт может принадлежать одновременно нескольким категориям. Свяжите продукты и категории отношением belongsToMany.

Получите продукты вместе с их категориями.

Получите категории вместе с продуктами, принадлежащими этим категориям.

Ленивая и нетерпеливая (жадная) загрузка

По следующей ссылке изучите раздел Нетерпеливая загрузка. Решите затем следующие задачи:

Самостоятельно опробуйте изученную теорию.