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)

我不知道为什么。如果有人知道请解释!