Laravel一对多保存Carbon错误
Laravel one-to-many save Carbon error
我有一个名为 SubjectData 的 class:
class SubjectData extends Model
{
protected $table = 'subject_datas';
protected $fillable = ['firstname','lastname','birthdate','birthcity','months'];
protected $dates = ['birthdate'];
public function setBirthdateAttribute($date)
{
// So we can add the time, not just he php date
$this->attributes['birthdate'] = Carbon::createFromFormat('d/m/Y', $date);
}
public function anamnesis() {
return $this->belongsTo('App\Anamnesis');
}
}
我有一个 class 叫做病历:
class Anamnesis extends Model
{
public function meetingTest() {
return $this->belongsTo('App\MeetingTest');
}
public function subject() {
return $this->belongsTo('App\Subject','subject_id','id');
}
public function subjectData() {
return $this->hasOne('App\SubjectData');
}
public function scholarHistory() {
return $this->hasOne('App\ScholarHistory');
}
public function familyHistory() {
return $this->hasOne('App\FamilyHistory');
}
public function psicodiagnosis() {
return $this->hasOne('App\Psicodiagnosis');
}
}
SubjectController class 的存储函数是这样工作的:
public function store(CreateSubjectRequest $request)
{
$input = $request->all();
// Let's generate the anamnesis of the subject
$anamnesis = Anamnesis::create();
$anamnesis->save();
$newSubjectData = $this->saveSubjectData($input);
$anamnesis->subjectData()->save($newSubjectData);
......
......
}
其中调用的函数是:
public function saveSubjectData($input)
{
$subjectData['firstname'] = $input['firstname'];
$subjectData['lastname'] = $input['lastname'];
$subjectData['birthcity'] = $input['birthcity'];
$subjectData['birthdate'] = $input['birthdate'];
return SubjectData::create($subjectData);
}
问题出在 "birthdate" 属性。
如果我在调用 $this->saveSubjectData($input) 后检查 $newSubjectData (dd($newSubjectdata)) 的值,生日的值正是我在前面的日历上设置的值(并且在数据库中的值也是正确的)
如果我将 dd($anamnesis->subjectData) 放在调用 $anamnesis->subjectData()->save($newSubjectData) 之后,结果是 "today" 日期,并且在数据库中值不是我设置的,而是今天的日期。
我找不到错误
P.S。日历在 Vue 模板中
我认为问题在于,日期必须是 Carbon 的一个实例或者根据您的数据库正确格式化 table。在您的 saveSubjectData() 方法中尝试以下操作
$subjectData['birthdate'] = Carbon\Carbon::parse($input['birthdate']
我写下了答案,但我感谢 John Aldrin 指引我朝着正确的方向前进。
您必须将时间戳 ('birthdate') 放在迁移的默认时间戳之后 table(因此在迁移结束时 table)
我不知道为什么。如果有人知道请解释!
我有一个名为 SubjectData 的 class:
class SubjectData extends Model
{
protected $table = 'subject_datas';
protected $fillable = ['firstname','lastname','birthdate','birthcity','months'];
protected $dates = ['birthdate'];
public function setBirthdateAttribute($date)
{
// So we can add the time, not just he php date
$this->attributes['birthdate'] = Carbon::createFromFormat('d/m/Y', $date);
}
public function anamnesis() {
return $this->belongsTo('App\Anamnesis');
}
}
我有一个 class 叫做病历:
class Anamnesis extends Model
{
public function meetingTest() {
return $this->belongsTo('App\MeetingTest');
}
public function subject() {
return $this->belongsTo('App\Subject','subject_id','id');
}
public function subjectData() {
return $this->hasOne('App\SubjectData');
}
public function scholarHistory() {
return $this->hasOne('App\ScholarHistory');
}
public function familyHistory() {
return $this->hasOne('App\FamilyHistory');
}
public function psicodiagnosis() {
return $this->hasOne('App\Psicodiagnosis');
}
}
SubjectController class 的存储函数是这样工作的:
public function store(CreateSubjectRequest $request)
{
$input = $request->all();
// Let's generate the anamnesis of the subject
$anamnesis = Anamnesis::create();
$anamnesis->save();
$newSubjectData = $this->saveSubjectData($input);
$anamnesis->subjectData()->save($newSubjectData);
......
......
}
其中调用的函数是:
public function saveSubjectData($input)
{
$subjectData['firstname'] = $input['firstname'];
$subjectData['lastname'] = $input['lastname'];
$subjectData['birthcity'] = $input['birthcity'];
$subjectData['birthdate'] = $input['birthdate'];
return SubjectData::create($subjectData);
}
问题出在 "birthdate" 属性。
如果我在调用 $this->saveSubjectData($input) 后检查 $newSubjectData (dd($newSubjectdata)) 的值,生日的值正是我在前面的日历上设置的值(并且在数据库中的值也是正确的)
如果我将 dd($anamnesis->subjectData) 放在调用 $anamnesis->subjectData()->save($newSubjectData) 之后,结果是 "today" 日期,并且在数据库中值不是我设置的,而是今天的日期。
我找不到错误
P.S。日历在 Vue 模板中
我认为问题在于,日期必须是 Carbon 的一个实例或者根据您的数据库正确格式化 table。在您的 saveSubjectData() 方法中尝试以下操作
$subjectData['birthdate'] = Carbon\Carbon::parse($input['birthdate']
我写下了答案,但我感谢 John Aldrin 指引我朝着正确的方向前进。
您必须将时间戳 ('birthdate') 放在迁移的默认时间戳之后 table(因此在迁移结束时 table)
我不知道为什么。如果有人知道请解释!