Yii2 отвязать записи через соединительную таблицу - PullRequest
1 голос
/ 07 августа 2020

У меня две модели; Пользователь и лотерея. У меня также есть соединительная таблица только с id, user_id и raffle_id.

Затем я получаю Raffles из модели User следующим образом:

public function getRaffles()
{
    return $this->hasMany(Raffle::class, ['id' => 'raffle_id'])
        ->viaTable('raffle_user', ['user_id' => 'id']);
}

И из модели Raffles, например:

public function getUsers()
{
    return $this->hasMany(User::class, ['id' => 'user_id'])
        ->viaTable('raffle_user', ['raffle_id' => 'id']);
}

Это работает, и я могу успешно позвонить $user->link('raffles', $raffle); et c.

Однако, когда я пытаюсь отсоединить запись вроде $user->unlink('raffles', $raffle); Я получаю сообщение об ошибке:

SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'raffle_id' cannot be null

Я что-то делаю неправильно или что-то неправильно настроено?

1 Ответ

1 голос
/ 07 августа 2020

https://www.yiiframework.com/doc/guide/2.0/en/db-active-record говорит следующее:

По умолчанию метод unlink () устанавливает значение (значения) внешнего ключа, которые определяют существующую связь, как null. Однако вы можете удалить строку таблицы, которая содержит значение внешнего ключа, передав параметр $ delete как истинный методу.

Так что, если ваш столбец raffle_id не определен как НЕ NULL? Это объяснило бы ситуацию.

Вы должны передать true в качестве третьего атрибута или установить в столбце NOT NULL настройки.

Кстати, здесь должно использоваться то же отношение. Почему у вас там raffles когда link и raffle когда unlink?

...