使用数组更新Laravel Eloquent ORM

时间:2013-12-06 16:24:42

标签: php orm laravel eloquent

我正在试图弄清楚如何从数组更新和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);

    /*
    |--------------------------------------------------------------------------
    | 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'));
}

1 个答案:

答案 0 :(得分:3)

由于您要做的是批量分配,我建议您检查一下$fillable模型中是否定义了Patient属性:

class Patient extends Eloquent {

    protected $fillable = array('patient_payload');

}

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


进一步阅读: