Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Читала я доки, нигде не нашла примера связи при помощи belongsToMany более двух моделей.(
Про модель я уже поняла, но я же написала про belongsToMany, это же не модель, а pivot-table для связи более двух моделей в одном месте... И что же, pivot таблицы ларавел понимает только с двумя ключами, только для двух моделей? Не более что ли?
тебе не нужен пивот если отношения один-ко-многим. обеспечение уникальности можно гарантировать добавив уникальный индекс по (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 указать более двух первичных ключей?
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.
}%модели в ларавель не поддерживают составные первичные ключи. я в таких случаях делаю обычные инкрементальные id-шники и добавляю уникальный индекс по нужным полям.
Вот статья на обход этого (после её прочтения, собственно, и появились такие ключи и в моей бд)) http://blog.artdevue.com/laravel-4-comp … y-key.html
}%кроме того, в постановке задачи отсутствует собственно описание отношений. где один ко многим? где один к одному? ничего не понять.
Т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
Всем привет!
Есть 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?
Страницы 1