Laravel по-русски

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

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

#1 28.11.2014 00:25:12

Серго

Проектирование базы данных, отношения многие к многим

Вечер добрый!
Коль, все в чате молчат, задам интересующие вопросы сюда.
8ebd1ca6f6c2.png
Мои действия, прописываю значит я в модели Book

public function categories() {
	return $this->belongsToMany('Category');
}
public function authors() {
	return $this->belongsToMany('Author');
}

и соответственно в модели Автор и Рубрика

public function books() {
	return $this->belongsToMany('Book');
}

Сама миграция - pastebin

Тут и появились вопросы:
1. Немного смущает, что в книге могут быть авторЫ и рубрикИ. Я придумал заносить авторов и рубрики в таблицу книг, если их больше 1го через запятую, к примеру 1,2,3,4...

1.1 Если бы не авторЫ и не рубрики, то можно было бы сделать внешними ключами автора и рубрику в таблице книги и не париться.

2. Как быть например, если я вывожу всю информацию по книге??? Сначала я просто выводил id авторов, но нужно ведь подставить туда ФИО.

3. Или же при редактировании книги, при генерации выбранного селекта, как быть в таких случаях?

4. Может лучше создать доп. таблицу books_authors, ну и туда первичные ключи от книг и авторов занести?

#2 28.11.2014 10:32:46

Re: Проектирование базы данных, отношения многие к многим

У Вас структура БД неправильная. Для связей многие-ко-многим (книги-авторы, книги-рубрики) нужны pivot таблицы. Поправьте миграции. Должно быть что-то в этом роде:

книги
	название
	фото
	
книги-авторы
	книга_id
	автора_id
	

авторы
	имя
	фамилия

книги-рубрики
	книга_id
	рубрика_id

рубрики
	название

Тогда складирование данных не будет смущать ни Вас, ни Eloquent (вопросы 1.*).

Зависимости вытягивайте при запросе с помощью with('authors', 'categories') (вопрос 2).

Читайте мануал (вопрос 3).

И в самом конце Вы вышли-таки на принципы построения архитектуры БД. Почитайте лучше что-нибудь касательно реляционных БД и работы с ними. Рекомендую Мартина Грабера SQL.

Изменено SMGladkovskiy (28.11.2014 10:33:51)

Не в сети

#3 28.11.2014 13:35:48

Серго

Re: Проектирование базы данных, отношения многие к многим

SMGladkovskiy пишет:

У Вас структура БД неправильная. Для связей многие-ко-многим (книги-авторы, книги-рубрики) нужны pivot таблицы. Поправьте миграции. Должно быть что-то в этом роде:

Тогда складирование данных не будет смущать ни Вас, ни Eloquent (вопросы 1.*).

Зависимости вытягивайте при запросе с помощью with('authors', 'categories') (вопрос 2).

Читайте мануал (вопрос 3).

И в самом конце Вы вышли-таки на принципы построения архитектуры БД. Почитайте лучше что-нибудь касательно реляционных БД и работы с ними. Рекомендую Мартина Грабера SQL.

Спасибо большое за ответ.

Да про pivot таблицы я думал из самого начала, что-то меня сбили эти авторы и рубрики.
Связи же остаются в моделях те же?

#4 28.11.2014 13:40:41

Re: Проектирование базы данных, отношения многие к многим

Серго пишет:

Связи же остаются в моделях те же?

Да.

Не в сети

#5 29.11.2014 03:39:51

Серго

Re: Проектирование базы данных, отношения многие к многим

Всё думал в голове как буду это всё реализовывать, но возник еще один вопрос. На теории я представляю как будет, а вот реализацию не могу понять. Допустим добавляем мы новую книгу и эта книга относиться, больше чем к одной категории допустим или вместо категорий, авторы к примеру. Как в этом случае мы будем добавлять запись в бд? Через цикл? Это получается один запрос будет идти в табл. книга, а второй в категории-книги ?

#6 29.11.2014 09:28:02

Re: Проектирование базы данных, отношения многие к многим

Смотрите мануал. Там есть информация о том, как управлять зависимостями. Вам нужен sync(). Можно обойтись без цикла, одним запросом.

Не в сети

#7 29.11.2014 13:30:13

Серго

Re: Проектирование базы данных, отношения многие к многим

SMGladkovskiy пишет:

Смотрите мануал. Там есть информация о том, как управлять зависимостями. Вам нужен sync(). Можно обойтись без цикла, одним запросом.

Понял вас. Спасибо большое.

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