У меня странная проблема.
Я создал наблюдателя модели для моей пользовательской модели. Наблюдатель модели запускается при «сохранении». когда я сбрасываю объект в самом конце отображаемой модели пользователя (это как раз перед сохранением .. согласно документации laravel), он отображает все атрибуты, правильно установленные для объекта, я даже видел ошибку, которая показывала правильные атрибуты, установленные и вставленные в мою таблицу базы данных. Однако после завершения сохранения и запроса базы данных два поля не сохраняются в таблице.
Нет кода, написанного мною, сидящего между точкой, где я сбросил атрибуты, чтобы проверить, что они были установлены, и операцией сохранения в базу данных. поэтому я понятия не имею, что могло вызвать это. Все имена установлены правильно, и, как я уже сказал, атрибуты отображаются как вставленные в базу данных, они просто никогда не сохраняются, я не получаю сообщений об ошибках, и только два из десяти атрибутов не сохраняются.
В своих поисках я обнаружил много сообщений, в которых подробно описывается, что свойство $ fillable должно быть установлено, или проблемы, связанные с проблемой с неправильными именами или неустановленными переменными, однако, поскольку у меня уже есть определенные атрибуты, которые не сохраняются, указанные в массиве $ fillable, на Помимо того факта, что они распечатывают в точности так, как ожидалось до сохранения, я не верю, что эти проблемы связаны с проблемой, с которой я столкнулся.
чтобы спасти звоню:
User::create(Input::all());
а затем наблюдатель, который обрабатывает данные, выглядит так:
class UserObserver {
# a common key between the city and state tables, helps to identify correct city
$statefp = State::where('id',$user->state_id)->pluck('statefp');
# trailing zeros is a function that takes the first parameter and adds zeros to make sure
# that in this case for example, the dates will be two characters with a trailing zero,
# based on the number specified in the second parameter
$user->birth_date = $user->year.'-'.$user->trailingZeros( $user->month, 2 ).'-'.$user->trailingZeros( $user->day, 2 );
if(empty($user->city)){
$user->city_id = $user->defaultCity;
}
$user->city_id = City::where( 'statefp', $statefp )->where('name', ucfirst($user->city_id))->pluck('id');
# if the user input zip code is different then suggested zip code then find location data
# on the input zip code input by the user from the geocodes table
if( $user->zip !== $user->defaultZip ){
$latlon = Geocode::where('zip', $user->zip)->first();
$user->latitude = $latlon['latitude'];
$user->longitude = $latlon['longitude'];
}
unset($user->day);
unset($user->month);
unset($user->year);
unset($user->defaultZip);
unset($user->defaultCity);
}
это код для двух значений, которые не устанавливаются, когда я запускаю
dd($user);
все переменные установлены правильно и отображаются на экране попытки вставки mysql с правильными значениями, но они не сохраняются после этой точки ... мне кажется, что, возможно, mysql отклоняет значения для city_id и Birth_date. Однако я не могу понять, почему и проблема в Laravel или mysql.