Laravel 5用关系保存和更新模型


Laravel 5 saving and updating models with relationship

首先感谢你看我的问题,很抱歉我的英语很差。

我有两个模型:

下一个关系的用户模型:

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

和DatosAlumno模型:

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

如果我打印dd('Request::all()):

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" => "michelle76@conroy.com"
    "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
}

在推送到数据库之前,必须将数据设置为DatosAlumno模型(hasOne关系)。目前,您只能将数据设置为用户模型。这就行了:

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

顺便说一下,总是用英语写函数和变量名是一个很好的做法。通过这种方式,代码更易于阅读和理解,任何人将在你之后工作的这段代码。