При регистрации пользователя создается модель Shop, у этой модели в методе afterSave, создается модель User:
Код: Выделить всё
public function afterSave($insert, $changedAttributes)
{
parent::afterSave($insert, $changedAttributes);
$user = new User();
$user->shop = $this;
$user->name = $this->email;
$user->save();
}
Код: Выделить всё
public function afterSave($insert, $changedAttributes)
{
parent::afterSave($insert, $changedAttributes); // TODO: Change the autogenerated stub
$kassir = new Kassir();
$kassir->login = $this->name;
$kassir->pass = md5(uniqid(rand(), true));
$kassir->is_main = 1;
$kassir->link('shop', $this->shop);
$kassir->link('user', $this);
$kassir->save();
}
По ошибке понятно что второй link по какой-то причине не устанавливается, смотрю в логах и вижу следующее:exception 'PDOException' with message 'SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`nekarta`.`kassir`, CONSTRAINT `kassir_ibfk_2` FOREIGN KEY (`uid`) REFERENCES `user` (`id`))'
Т.е. uid не передается, если поменять линки местами то тогда uid устанавливается, а sid нет. Но если устанавливать id вручную:INSERT INTO `kassir` (`login`, `pass`, `is_main`, `sid`) VALUES ('test@test.ru', '7cb8795fcdbad118c2ef7947250931ab', 1, 12)
Код: Выделить всё
$kassir->sid = $this->shop->id;
$kassir->uid = $this->id;
Поэтому вопрос, почему нельзя использовать несколько link?