2014-12-22 2 views
2

이상한 문제가 있습니다.Laravel Eloquent가 (아마도 mysql) 데이터베이스에 속성을 저장하지 않습니다.

내 사용자 모델에 대한 모델 관찰자를 만들었습니다. 모델 관찰자는 '저축'중입니다. 내가 표시 할 사용자 모델의 맨 끝에 객체를 덤프하면 (이것은 laravel docs에 따라 저장되기 직전입니다) 객체에 대해 올바르게 설정된 모든 속성을 표시합니다. 올바른 속성이 설정되고 내 데이터베이스 테이블에 삽입됩니다. 그러나 저장이 완료된 후 데이터베이스에 쿼리하면 두 개의 필드가 테이블에 저장되지 않습니다.

내가 설정 한 속성과 데이터베이스에 저장 작업을 저장하기 위해 속성을 덤프 한 지점 사이에 앉아있는 코드가 없습니다. 그래서 나는 이것이 어떤 일이 일어날 지 모른다. 모든 이름이 올바르게 설정되어 있고 내가 말한 것처럼 특성이 데이터베이스에 삽입 된 것으로 나타나고 절대로 저장되지 않고 오류 메시지가 나타나며 열 속성 중 두 개만 저장되지 않습니다.

내 검색에서 $ 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에 문제가 있는지 이해할 수 없습니다.

+1

사용자 개체를 채우고 항목을 저장하는 코드를 표시해야합니다. – Varedis

답변

0

내가

User::create(); 

를 호출했다 나는 내 관찰자가 듣고있는하려고 거라고 생각하기 때문에 : 그것은 단지 날짜와 도시의 변수를 영향을 이유를 잘 모르겠어요

creating(); 

, 하지만 saving() 대신에 creating()에서 수신 대기하는 함수를 변경하면 내 문제가 해결 된 것 같습니다.

관련 문제