2016-10-23 3 views
0

все, у меня есть таблица статусы с полями id, user_id, parent_id, body.
теперь таблица состояния имеет отношения с пользователем, как это:Обновление BelongsTo Отношения в Laravel 5,3

Статус Модель

public function user() { 
     return $this->belongsTo('App\User', 'user_id'); 
    } 

    public function scopeNotReply($query) { 
     return $query->whereNull('parent_id'); 
    } 

    public function replies() { 
     return $this->hasMany('App\Status', 'parent_id'); 
    } 

пользователя Модель

public function statuses() { 
    return $this->hasMany('App\Status', 'user_id'); 
} 

, но, к сожалению, я не могу получить доступ к user_id когда Я хочу ответить на статус и сохранить в базе данных с той же таблицей statuses. Я использую метод associate и StatusController, как это:

public function postReply(Request $request, $statusId){ 
    $this->validate($request, [ 
     "reply-{$statusId}" => 'required|max:1000', 
    ]); 

    $status = Status::notReply()->find($statusId)->first(); 

    $reply = Status::create([ 
     'body' => $request->input("reply-{$statusId}"), 
    ])->user()->associate(Auth::user()); 

    $status->replies()->save($reply); 

    return redirect()->back(); 
} 

каждый раз, когда я пытаюсь ответить статус, я получил сообщение об ошибке SQLSTATE[HY000]: General error: 1364 Field 'user_id' doesn't have a default value.

Может ли кто-нибудь помочь мне решить эту проблему ??

Спасибо

ответ

0

Причина вы получаете эту ошибку, потому что вы создаете Status перед user_id было связано с ним.

Один из способов обойти это было бы переместить user_id логику внутри создания массива т.е .:

Status::create([ 
    'body' => $request->input("reply-{$statusId}"), 
    'user_id' => Auth:user()->id 
]); 

Надежда это помогает!

+0

Благодарим вас за ответ, но я все равно получаю такое же сообщение об ошибке. – Arta

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