viaTable yii2

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Testonder
Сообщения: 10
Зарегистрирован: 2015.06.02, 12:44

viaTable yii2

Сообщение Testonder »

Добрый день.
Пытаюсь разобраться со связями через связывающую таблицу.
Есть таблица `Post` (`id`, `title`) с записями блога и таблица `Tag` (`id`, `title`) с тегами. Напрямую они не знают друг о друге и никак не связываются. Для этого создана соединяющая таблица 'tag_to_post_bind' (`id`, `post_id`, `tag_id`). Не могу разобраться как мне из модели Article получить список тегов для конкретного поста, теряюсь на моменте:

Код: Выделить всё

$this->hasMany(Tag::className(), ['customer_id' => 'id']); 
Т.к. напрямую таблицы не связаны, непонятно что писать в $link метода hasMany.

Заранее благодарен за помощь!
Аватара пользователя
vitalik1183
Сообщения: 1675
Зарегистрирован: 2014.07.01, 08:42

Re: viaTable yii2

Сообщение vitalik1183 »

Используйте Gii, он вам сгенерирует связи как нужно. То как написано у вас - вы никак не получите.
Yii2!
Testonder
Сообщения: 10
Зарегистрирован: 2015.06.02, 12:44

Re: viaTable yii2

Сообщение Testonder »

Ведь gii опирается на ключи в таблице, чтобы связи расставить. Получается, необходимо перепроектировать таблицы.
Неужели ActiveRecord не сможет решить такую типичную задачу?
Аватара пользователя
jilizart
Сообщения: 82
Зарегистрирован: 2010.04.22, 18:56
Контактная информация:

Re: viaTable yii2

Сообщение jilizart »

Код: Выделить всё

        return $this->hasMany(Tag::className(), ['id' => 'tag_id']) // связываем tag.id с tag_to_post_bind.tag_id
            ->viaTable('tag_to_post_bind', ['post_id' => 'id']); // tag_to_post_bind.post_id с post.id
 
Аватара пользователя
vitalik1183
Сообщения: 1675
Зарегистрирован: 2014.07.01, 08:42

Re: viaTable yii2

Сообщение vitalik1183 »

Testonder писал(а):Ведь gii опирается на ключи в таблице, чтобы связи расставить. Получается, необходимо перепроектировать таблицы.
Неужели ActiveRecord не сможет решить такую типичную задачу?
Если не указаны внешние ключи, то разумеется он не расставит связи. Дак связь можно пробросить и не имея ключей, выше вам уже написали как. Я просто сказал для примера сделайте через gii чтобы разобраться. А потом кидайте куда угодно, хоть с ключами хоть нет. И причем тут ActiveRecord? Он сам ничего не сможет решить, пока вы не укажите как это решать.
Yii2!
Testonder
Сообщения: 10
Зарегистрирован: 2015.06.02, 12:44

Re: viaTable yii2

Сообщение Testonder »

jilizart писал(а):

Код: Выделить всё

        return $this->hasMany(Tag::className(), ['id' => 'tag_id']) // связываем tag.id с tag_to_post_bind.tag_id
            ->viaTable('tag_to_post_bind', ['post_id' => 'id']); // tag_to_post_bind.post_id с post.id
То что надо! Благодарю!
Testonder
Сообщения: 10
Зарегистрирован: 2015.06.02, 12:44

Re: viaTable yii2

Сообщение Testonder »

Если не указаны внешние ключи, то разумеется он не расставит связи. Дак связь можно пробросить и не имея ключей, выше вам уже написали как. Я просто сказал для примера сделайте через gii чтобы разобраться. А потом кидайте куда угодно, хоть с ключами хоть нет.[/quote]
Так как тогда мне Gii поможет если он по ключам генерит? Я расставил в таблице ключи так как описал в первом посте, и Gii в итоге сгенерил мне модели, где Post и Tag ничего не знает друг о друге, так как на уровне БД связей нет.
Дак связь можно пробросить и не имея ключей, выше вам уже написали как. Я просто сказал для примера сделайте через gii чтобы разобраться. А потом кидайте куда угодно, хоть с ключами хоть нет.
Так всё таки можно было сделать так, через таблицу-связку?
И причем тут ActiveRecord? Он сам ничего не сможет решить, пока вы не укажите как это решать.
Вопрос в том и был - как объяснить ActiveRecord что откуда брать.
Аватара пользователя
vitalik1183
Сообщения: 1675
Зарегистрирован: 2014.07.01, 08:42

Re: viaTable yii2

Сообщение vitalik1183 »

Блять, сгенерируйте РАЗ через gii и разберитесь. Потом кидайте связи куда нужно, как вам угодно хоть с ключами хоть с чем. Ну епс тудей в самом деле.

Указать можно что угодно, всем до пизды на ваши ключи и актив рекорду в том числе. Что пропишите то и свяжет. Gii свяжет только по ключам, но вам нужно разобраться как он это связывает и потом вы сами сможете кидать связи даже если НЕТ внешнего ключа. Доступно объяснил?
Yii2!
Testonder
Сообщения: 10
Зарегистрирован: 2015.06.02, 12:44

Re: viaTable yii2

Сообщение Testonder »

Чувак, не нервничай :D
С простыми связями и без Gii и без ключей давно разобрался... Спрашивал про viaTable.
Аватара пользователя
vitalik1183
Сообщения: 1675
Зарегистрирован: 2014.07.01, 08:42

Re: viaTable yii2

Сообщение vitalik1183 »

Testonder писал(а):Чувак, не нервничай :D
С простыми связями и без Gii и без ключей давно разобрался... Спрашивал про viaTable.
Да я вроде спокоен, просто это.. ну чтоб донести было чотче :D
Yii2!
Ответить