2015-05-24 2 views
1

Сначала спасибо за просмотр моего вопроса и извините за мой плохой английский.Laravel 5 с сохранением и обновлением моделей с отношением

У меня есть две модели:

пользователя Модель со следующей взаимосвязи:

public function datosAlumno() 
{ 
    return $this->hasOne('sj\Models\DatosAlumno','alumno_id'); 
} 

и DatosAlumno модель:

public function alumno(){ 
    return $this->belongsTo('sj\Models\User','alumno_id'); 
} 

если я печатаю с дд (\ Request :: все ()):

array:16 [▼ 
    "_method" => "PUT" 
    "_token" => "vnQp4msoo8UHGan5m4v8VYvX1kKYx8HnbhqaywZH" 
    "rut" => "111111111111" 
    "nombre" => "AAAAAAAAAA" 
    "apellido_paterno" => "BBBBBBBBBBB" 
    "apellido_materno" => "CCCCCCCCCCCC" 
    "sexo" => "masculino" 
    "comuna_id" => "13" 
    "direccion" => "RRRRRRRRRRRRRRRRRRRRRR" 
    "telefono_fijo" => "14876955" 
    "telefono_movil" => "3333333333" 
    "fecha_nacimiento" => "2000-11-03" 
    "email" => "[email protected]" 
    "datosAlumno" => array:1 [▼ 
     "apoderado_id" => "37" 
    ] 
    "password" => "" 
    "password_confirmation" => "" 
] 

Я пытаюсь сохранить или обновить «datosAlumno», но когда я использую сохранить, нажмите или обновить поле не изменяется в базе данных

public function update($id) 
{ 
    $user = User::with('datosAlumno')->find($id); 
    $user->fill(\Request::all()); 
    $user->push(); 
} 

Если я dd($user->datosAlumno) после наполняться \Request::all() я получаю это:

DatosAlumno {#297 ▼ 
    #table: "datos_alumno" 
    #fillable: array:2 [▼ 
     0 => "alumno_id" 
     1 => "apoderado_id" 
    ] 
    #connection: null 
    #primaryKey: "id" 
    #perPage: 15 
    +incrementing: true 
    +timestamps: true 
    #attributes: array:6 [▼ 
     "id" => 1 
     "alumno_id" => 97 
     "apoderado_id" => 15 
     "deleted_at" => null 
     "created_at" => "0000-00-00 00:00:00" 
     "updated_at" => "0000-00-00 00:00:00" 
    ] 
    #original: array:6 [▼ 
     "id" => 1 
     "alumno_id" => 97 
     "apoderado_id" => 15 
     "deleted_at" => null 
     "created_at" => "0000-00-00 00:00:00" 
     "updated_at" => "0000-00-00 00:00:00" 
    ] 
    #relations: [] 
    #hidden: [] 
    #visible: [] 
    #appends: [] 
    #guarded: array:1 [▶] 
    #dates: [] 
    #casts: [] 
    #touches: [] 
    #observables: [] 
    #with: [] 
    #morphClass: null 
    +exists: true 
} 

ответ

5

вы должны установить данные в DatosAlumno модели (hasOne отношения), прежде чем нажать на базу данных. В настоящее время вы устанавливаете данные только для модели пользователя. Так что это будет работать:

public function update($id) 
{ 
    $user = User::with('datosAlumno')->find($id); 
    $user->fill(\Request::all()); 
    $user->datosAlumno->fill(\Request::get('datosAlumno')); 
    $user->push(); 
} 

Кстати, это хорошая практика, чтобы ВСЕГДА написать функцию и имена переменных на английском языке. Таким образом, код становится более читабельным и понятным для всех, кто будет работать над этим кодом после вас.

+0

спасибо. Я рассмотрю вашу рекомендацию. –

+0

Привет, я пытаюсь что-то очень похожее на то, что у вас здесь: $ Rental = Rental :: with ('region', 'location') -> find ($ id); где я могу заполнить прямые арендные поля $ Rental-> fill ($ requestData); и сохраните его, но когда я попытаюсь заполнить данные о местоположении: $ Rental-> location-> fill ($ otherRequestData); он не сохраняется. Я попробовал $ Rental-> push(), save(), update(), но каждый раз, когда данные местоположения никогда не сохраняются. Вы знаете, почему это может произойти? Объект $ Rental хорошо выглядит в Tinker с включенными данными о взаимоотношениях. – mtpultz

+0

@mtpultz Пожалуйста, разместите свой случай как отдельный вопрос и включите некоторые образцы кода из декларации вашего класса :) – shaddy

Смежные вопросы