Laravel一对多保存Carbon错误

时间:2016-10-13 14:13:21

标签: laravel eloquent php-carbon

我有一个名为SubjectData的课程:

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

我有一个名为Anamnesis的课程:

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类的store函数的工作方式如下:

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))的值,则生日的值正好是我在前端的日历上设置的值(和也在db中,值是正确的)

如果我在调用$ anamnesis-> subjectData() - > save($ newSubjectData)之后输入dd($ anamnesis-> subjectData),结果就是"今天"日期以及数据库中的值不是我设置的值,而是今天的日期。

我无法找到错误

P.S。日历位于Vue模板

2 个答案:

答案 0 :(得分:0)

我认为问题在于,日期必须是Carbon的实例,或者根据您的数据库表格格式化。在saveSubjectData()方法中尝试以下内容

$subjectData['birthdate']  = Carbon\Carbon::parse($input['birthdate'] 

答案 1 :(得分:0)

我写下答案,但我感谢约翰奥尔德林引导我朝着正确的方向前进。

您必须在迁移表的默认时间戳之后放置时间戳(' birthdate')(所以在迁移表的末尾)

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