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();
}
顺便说一句,总是用英文写函数和变量名是个好习惯。这样,对于在您之后使用此代码的任何人来说,代码都更具可读性和易于理解。
首先感谢观看我的问题,抱歉我的英语不好。
我有两个型号:
具有下一个关系的用户模型:
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();
}
顺便说一句,总是用英文写函数和变量名是个好习惯。这样,对于在您之后使用此代码的任何人来说,代码都更具可读性和易于理解。