2016-10-13 2 views
0

Я класс называется SubjectData:Laravel один-ко-многим сохранить Углеродные ошибки

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 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 работает как это:

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».

Если я проверяю значение $ newSubjectData (dd ($ newSubjectdata)) после вызова $ this-> saveSubjectData ($ input) значение даты рождения точно совпадает с тем, которое я установил в календаре на фронте (и также в db значение верно)

Если я поместил dd ($ anamnesis-> subjectData) после вызова $ anamnesis-> subjectData() -> save ($ newSubjectData), результатом будет дата «сегодня» а также в БД значение не та, которую я установил, а дата сегодняшнего дня.

Не удается найти ошибку

P.S. Календарь находится внутри шаблона Vue

ответ

0

Я думаю, проблема в том, что дата должна быть экземпляром Carbon или правильно отформатирована в соответствии с вашей таблицей базы данных. Попробуйте следующее внутри метода saveSubjectData()

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

Дело в том, что до тех пор, пока я не получу команду $ anamnesis-> subjectData() -> save ($ newSubjectData), дата будет правильно сохранена в БД. Это связано с тем, что я установил свойство типа типа $ date внутри модели. Даже без команды Carbon \ Carbon: formatFrom ... это работает. Только когда я пытаюсь подключить его к анамнезу, кажется, сбросить дату. –

+0

Я вижу. Попробуйте использовать istead для использования 'save()': '$ anamnesis-> subjectData() -> attach ($ newSubjectData);' –

+1

Вызов неопределенного метода Illuminate \ Database \ Query \ Builder :: attach() –

0

Я записываю ответ, но я благодарю Джона Олдрина, который вел меня в правильном направлении.

Вы должны поставить метку времени («РОЖДЕНИЯ») ПОСЛЕ временных меток по умолчанию таблицы миграции (так в конце таблицы миграции)

Я не знаю, почему. Если кто-то знает, пожалуйста, объясните!

+0

Это странно o_O У меня есть таблица с именами и моя миграция имеет '$ table-> timestamp ('wouldbe_on'); $ Стол-> метки времени(); $ table-> softDeletes(); 'Anyways, здорово, что вы решили это самостоятельно :) –

Смежные вопросы