Задать вопрос
@zidevar

Yii2. Best practice реализации связи many-to-many?

Возникла необходимость реализации связи многие ко многим. Вариантов есть немало. Может есть какой-то best practice по этой задаче? Рассматривал вариант https://github.com/voskobovich/yii2-many-to-many-b... но там используют метод установления связей, отличный от появившегося в yii2 - link($relationName, relatedModel, $extraColumns = []).

Допустим есть Post и Tag. Есть и PostTag соответственно. Я правильно понимаю, что верным решением будет вынести в поведение метод в котором происходит установление связей с помощью link($relationName, relatedModel, $extraColumns = []), обернутый в транзакцию? Есть ли пример такой реализации? Я не находил.
  • Вопрос задан
  • 509 просмотров
Подписаться 1 Оценить Комментировать
Решения вопроса 1
qonand
@qonand
Software Engineer
Насколько я понимаю у Вас вопрос именно по сохранению связанных данных. На мой взгляд использование link вполне уместно для связи пары записей, но для связи множества записей с одной (как в Вашем примере), его использовать не стоит, т.к. это приводит к росту кода и соответственно его усложнению. На мой взгляд лучше использовать приведенное Вами поведение т.к. оно делает практически все что Вы описали (в том числе и транзакции)
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
best practice - это стандартные для framework решения, например:
public function getReviews()
{
    return $this->hasMany(Review::className(), ['id' => 'review_id']);
}

такие связи хорошо документированы и не совсем понятно, чем они Вас не устраивают?
Возможно у Вас есть конкретная проблема, которую Вы не знаете как можно решить? Тогда опишите детальнее.

Вариант по ссылке - это поведение, для модели. По сути попытка вынести часто используемые методы в поведение и упростить их использование. Но при этом попытки универсализации этого класса, привели к потере производительности в некоторых местах. На мой взгляд подход с поведениями здравый, но надо писать под проект свои поведения и не вижу смысла выносить связи в них.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы