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();
}

如果我在填充 \Request::all() 之后执行 dd($user->datosAlumno),我会得到这个:

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();
}

顺便说一句,总是用英文写函数和变量名是个好习惯。这样,对于在您之后使用此代码的任何人来说,代码都更具可读性和易于理解。