Laravel по-русски

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

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

#1 Re: Laravel 4 » Как правильно настраивать зависимости в Eloquent? » 12.03.2015 17:36:13

Читала я доки, нигде не нашла примера связи при помощи belongsToMany более двух моделей.(

#2 Re: Laravel 4 » Как правильно настраивать зависимости в Eloquent? » 12.03.2015 13:02:50

Про модель я уже поняла, но я же написала про belongsToMany, это же не модель, а pivot-table для связи более двух моделей в одном месте... И что же, pivot таблицы ларавел понимает только с двумя ключами, только для двух моделей? Не более что ли?

#3 Re: Laravel 4 » Как правильно настраивать зависимости в Eloquent? » 11.03.2015 16:31:52

constb пишет:

тебе не нужен пивот если отношения один-ко-многим. обеспечение уникальности можно гарантировать добавив уникальный индекс по (user_id, num1, num2)

Не не не. Между T2 и num1, T2 и num2 - многие-ко-многим. И у этой комбинации часто будут меняться T1. Комбинаций num1 и num2 чётко прописанное количество, и это количество существует для каждого пользователя (т.е. вообще можно после создания новой строки в T2 сразу создавать строки id_t2|num1|num2|id_t1|st, где id_t2=id новой записи в T2, id_t1 и st =NULL), поэтому нельзя относить их в T1 в виде атрибутов T1. 
Короче говоря, раз первоначальный вариант не подходит в рамках ларавела, тогда помимо T1 и T2 будут NUM1 (id_num1, num1) и NUM2 (id_num2, num2). А T3 будет:

T3 (имеет составной первичный ключ):
id_t2 - первичный ключ, внешний из T2,
num1 - первичный ключ, внешний из NUM1,
num2 - первичный ключ, внешний из NUM2,
id_t1 - внешний ключ из T1,
st - обычный столбец.

В таком случае, таблица будет связующей между T2, num1 и num2 (pivot-table с pivot-полем st) и иметь связь T3 hasMany T1, T1 belongsTo T3. И сохраняется связь  T1 belongsTo T2, T2 hasMany T1.

У меня вопрос в другом теперь. Как в параметрах belongsToMany указать более двух первичных ключей?

#4 Re: Laravel 4 » Как правильно настраивать зависимости в Eloquent? » 10.03.2015 20:43:49

constb пишет:

T1 belongsTo T2
T2 hasMany T1
num1 и num2 должны быть столбцами в T1

Нет, нужно соблюдать уникальность комбинации значений из столбцов num1 и num2 для пользователя (т.е. у множества пользователей может быть комбинация num1=4; num2=23, но для каждого пользователя из этого множества эта комбинация встречается только один раз). В действительности num1 и num2 принимают значения от 1 до 5 и от 1 до 30 соответственно , поэтому создавать отдельные таблицы для них не стала, иначе было бы так:
id_num|value_num|
   1             1
   2             2
и т.д.
Но, судя по всему, раз ларавел не знает, что такое составной первичный ключ (как такое можно было допустить вообще...), придётся вынести num1 и num2 в отдельные таблицы, и тогда Т3 станет обычной pivot-table с двумя ещё полями - id_t1 и st.

#5 Re: Laravel 4 » Как правильно настраивать зависимости в Eloquent? » 09.03.2015 14:17:19

constb пишет:

}%модели в ларавель не поддерживают составные первичные ключи. я в таких случаях делаю обычные инкрементальные id-шники и добавляю уникальный индекс по нужным полям.

Вот статья на обход этого (после её прочтения, собственно, и появились такие ключи и в моей бд))  http://blog.artdevue.com/laravel-4-comp … y-key.html

constb пишет:

}%кроме того, в постановке задачи отсутствует собственно описание отношений. где один ко многим? где один к одному? ничего не понять.

Т1 относится к одному Т2, Т2 имеет много Т1. Но этой связи в моем случае не достаточно, ибо тогда я получаю беспорядочный список Т1, относящихся к конкретному Т2. А в Т3, по сути, отражена та же связь между Т1 и Т2, только с уточнениями через столбцы num1 и num2. Таким образом, на запрос списка всех Т1 для каждого конкретного Т2 (через Т3, разумеется) я получу:
id Т2| num1| num2| id T1
2        1         3        1
2        2         3        2
3        1         3        3
3        2         3        4
3        2         4        5

#6 Laravel 4 » Как правильно настраивать зависимости в Eloquent? » 08.03.2015 15:06:12

vorobei
Ответов: 12

Всем привет!

Есть 3 таблицы (T1, T2 и T3).

T1:
id_t1 - первичный ключ,
id_t2 - внешний ключ из T2,
прочие столбцы.

T2:
id_t2 - первичный ключ,
прочие столбцы.

T3 (имеет составной первичный ключ):
id_t2 - первичный ключ, внешний из T2,
num1 - первичный ключ,
num2 - первичный ключ,
id_t1 - внешний ключ из T1,
st - обычный столбец.

Созданы две модели для T1 и T2.
Подскажите, как правильно отразить все эти зависимости в Laravel?

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