У меня есть таблица «users» и таблица «activation_tokens». У меня есть отношение в модели User как hasOne (ActivationToken :: class);Laravel mass-assign insert new record create() альтернатива?
Это все работает нормально. Теперь я хочу создать токен при создании пользователя. Поэтому я звоню
$user->ActivationToken()->create(array('token'=>'RANDOM_STRING"));
Это все хорошо, но я попал в ошибку массового присвоения. I не хотите установить «токен» как заполняемый.
Вместо этого я стараюсь
$activationToken = new ActivationToken();
$activationToken->token = 'RANDOM_STRING";
$activationToken->save();
Что это хорошо, но она не устанавливает user_id поле в запросе. Думаю, я мог бы сделать это вручную, установив $activationToken->user_id = $user->id;
. Но это кажется неправильным, так как ORM должен обрабатывать это автоматически, насколько это возможно для рекламы. Так что я думаю, что я делаю что-то неправильно?
Я не мог понять, как это сделать правильно. Любые намеки?
Спасибо!
Если вы хотите перейти в _ORM way_, вам нужно установить токен в массив 'fillable' для массового присвоения. В противном случае вам нужно установить его вручную с помощью нестандартного метода '$ activationToken-> user_id = $ user-> id'. Два пути вы можете пойти. Почему вы не хотите устанавливать поле 'fillable'? – codedge
Если мне нужно установить все заполняемое, чтобы иметь возможность использовать путь ORM, разве это не побеждает цель заполняемого/охраняемого?Разве это цельное массовое задание является ошибочной концепцией? Кто бы все равно присвоил все значения из случайного запроса HTTP в запрос базы данных. :) Не было бы проще просто сделать функцию в классе ActivationToken, которая принимает аргумент user_id и вставляет токен? Тогда я мог бы просто вызвать ActivationToken :: inserToken ($ user-> id) и сделать с ним. –
@codedge, пожалуйста, см. Ответ, который я разместил. Кажется, есть способ обновить таблицу с помощью массового присвоения без добавления столбцов для заполнения. –