Laravel Eloquent не сохраняет свойства в базе данных (возможно, mysql)

У меня странная проблема.

Я создал наблюдателя модели для моей пользовательской модели. Наблюдатель модели запускается при «сохранении». когда я сбрасываю объект в самом конце отображаемой модели пользователя (это как раз перед сохранением .. согласно документации 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.


person Marcus Ruddick    schedule 22.12.2014    source источник
comment
Вам нужно показать код, в котором вы заполняете объект User и сохраняете элементы   -  person Varedis    schedule 22.12.2014


Ответы (1)


так как я звонил

User::create();

Я решил, что попробую, чтобы мой наблюдатель услышал:

creating();

Я не уверен, почему это повлияло только на переменные даты и города, но изменение функции прослушивания при создании () вместо сохранения (), похоже, решило мою проблему.

person Marcus Ruddick    schedule 22.12.2014