Php 使用数组更新Laravel Eloquent ORM

Php 使用数组更新Laravel Eloquent ORM,php,orm,laravel,eloquent,Php,Orm,Laravel,Eloquent,我试图找出如何从数组中更新和使用ORM模式。而不是一场接一场地去。这就是我目前所拥有的 public static function updatePatient($id){ $patient_payload = Input::all(); // eg. array('patient_first_name'=>'Test', 'patient_last_name'=>'TEST') $patient_to_update = Patient::find($id);

我试图找出如何从数组中更新和使用ORM模式。而不是一场接一场地去。这就是我目前所拥有的

public static function updatePatient($id){
    $patient_payload = Input::all();  // eg. array('patient_first_name'=>'Test', 'patient_last_name'=>'TEST')
    $patient_to_update = Patient::find($id);

    /*
    |--------------------------------------------------------------------------
    | Validate the request
    |--------------------------------------------------------------------------
    */
    if(!$patient_to_update)
        return Response::json(array('error'=>'No patient found for id given'), 400);

    /*
    |--------------------------------------------------------------------------
    | Update the patient entry.
    |--------------------------------------------------------------------------
    */


    $patient_to_update->update($patient_payload);
    $patient_to_update->save();

    return Response::json(array('success'=>'Patient was updated'));
}
这会抛出一个laravel模型错误,只是说:“patient_first_name”,是的,patient_first_name是db上的一个col。作为一项工作,我一直在做这件事,这很有效

public static function updatePatient($id){
    $patient_payload = Input::all();
    $patient_to_update = Patient::find($id);

    /*
    |--------------------------------------------------------------------------
    | Validate the request
    |--------------------------------------------------------------------------
    */
    if(!$patient_to_update)
        return Response::json(array('error'=>'No patient found for id given'), 400);

    /*
    |--------------------------------------------------------------------------
    | Update the patient entry. 
    |--------------------------------------------------------------------------
    */


    DB::table('patients')
        ->where('id',$id)
        ->update($patient_payload);

    //update laravel timestamps
    $patient_to_update->touch();        
    return Response::json(array('success'=>'Patient was updated'));
}

由于您要做的是批量分配,我建议您检查您是否在
患者
模型中定义了
$filleble
属性:

class Patient extends Eloquent {

    protected $fillable = array('patient_payload');

}
作为一种安全措施,除非您指定(允许属性的白名单)或(禁止属性的黑名单),否则Eloquent将不允许您通过批量分配修改任何模型的属性


进一步阅读:


你能公布你得到的准确错误吗?这很好,这很有效。我用$guarded将字段列为白名单。很好,laravel在默认情况下可以防止质量分配。