yii2-linker-behavior
yii2-linker-behavior copied to clipboard
Работают ли behaviors в связывающей таблице (ManyToMany)?
Имеем три таблицы: Users, Groups и связывается все через таблицу UsersToGroups.
В таблице users_to_groups три поля:
user_id, group_id, created_by, updated_by
Соответственно, в модели UsersToGroups есть такое поведение:
'blameable' => [ 'class' => 'BlameableBehavior', ],
Связывающие поля заполняются как надо, а вот created_by и updated_by всегда пустые. Т.е. behaviors Не отрабатывают. Это фича или бага?
@moneyadmin все зависит от того, как вы подключили и настроили поведение. Покажите примеры конфигураций.
Ну вот так указаны поведения в модели Users:
'LinkerBehaviorRelation' => [
'class' => \voskobovich\linker\LinkerBehavior::className(),
'relations' => [
'groupids' =>[
'groups',
'updater' => [
'class'=> \voskobovich\linker\updaters\ManyToManySmartUpdater::className(),
'viaTableAttributesValue' => [
'value' => function($updater, $relatedPk, $rowCondition)
{
return $updater->getBehavior()->owner->groupids_value[$relatedPk];
},
]
],
'get' => function($value)
{
return $value;
},
'set' => function($values)
{
//exit('ok');
return $values;
}
],
],
],
//...
А нет примера настроек, где behaviors связывающей модели (таблицы) точно работают?
Хм. Такое впечатление, что методы типа afterSave, afterDelete и прочие тоже не работают в модели для связывающей таблицы.
@moneyadmin посмотрите в логику поведения. Методы в связывающей таблице вроде и не должны работать. Модели для этой таблицы не должно быть вообще. Если же у вас есть модель, то это не связь много ко многим, а две последовательные простые связи. Если это так, то есть веротность, что вам мое поведение не подходит. Либо переносить логику с модели в методах afterSave & beforeSave в настройки поведения.