Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 19.09.2014 12:54:17

Несколько внешних ключей

Недавно начал изучать  Laravel и не до конца понимаю логику Eloquent. Подскажите, пожалуйста, как правильно сделать следующее:
Есть три таблицы: альбомы, группы и композиции. Таблица композиций связана внешними ключами с альбомами и группами.

music.png

CREATE TABLE `albums` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `album_name` varchar(100) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB;


CREATE TABLE `bands` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `band_name` varchar(100) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB;


CREATE TABLE `tracks` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `band_id` int(11) NOT NULL,
  `album_id` int(11) NOT NULL,
  `track_name` varchar(100) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `band_id` (`band_id`),
  KEY `album_id` (`album_id`)
) ENGINE=InnoDB;

ALTER TABLE `tracks`
  ADD CONSTRAINT `tracks_ibfk_2` FOREIGN KEY (`album_id`) REFERENCES `albums` (`id`),
  ADD CONSTRAINT `tracks_ibfk_1` FOREIGN KEY (`band_id`) REFERENCES `bands` (`id`);

Подскажите, каким методом получить список композиций, вместе с названиями альбомов и групп, используя ORM?
680c0e9557104e155272aa54b97b4c9c45a273cf.jpg


Т.е. аналог sql запроса

SELECT tracks.id, track_name, album_name, band_name
FROM tracks, bands, albums
WHERE tracks.album_id = albums.id
AND tracks.band_id = bands.id

Подозреваю, что у меня совсем простой вопрос, но я раньше с ORM не сталкивался.

Изменено Krapetor (19.09.2014 12:56:38)

Не в сети

#2 19.09.2014 13:44:06

Re: Несколько внешних ключей

http://laravel.com/docs/eloquent#eager-loading
В модели Треков прописывайте отношения к Альбомам и Брендам (belongsTo), а в запросе на Треки используйте with() на нужные свойства. Полученные объекты Треков будут иметь данные по обоим этим признакам ($track->brand, $track->album)...

Не в сети

#3 19.09.2014 16:56:42

Re: Несколько внешних ключей

Спасибо, все очень просто оказалось smile

Не в сети

Подвал раздела