Сейчас мы с вами разберем связывание моделей 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.
Получите продукты вместе с их категориями.
Получите категории вместе с продуктами, принадлежащими этим категориям.
Ленивая и нетерпеливая (жадная) загрузка
По следующей ссылке изучите раздел Нетерпеливая загрузка. Решите затем следующие задачи:
Самостоятельно опробуйте изученную теорию.