2016-06-29 4 views
0

Я пытаюсь сохранить следующие данные в БД, и он успешно хранится за исключением одной вещи.сохранение данных в laravel

Как я печатаю: $request->user()->posts()->save($answer);, все сохранено в порядке, кроме post_id. И если я его заменю на: $post->answers()->save($answer);, все будет сохранено штрафом, кроме user_id. Как отредактировать метод save() для сохранения обоих?

код из контроллера:

public function postAnswer(Request $request, $post_id) 
    { 


     $post = Post::where('id', $post_id)->first(); 
     $body = $request['body']; 
     $pros = $request['pros']; 
     $cons = $request['cons']; 

     $answer = new Answer(); 
     $answer->body = $body; 
     $answer->pros = $pros; 
     $answer->cons = $cons; 


$post->answers()->save($answer); 

ответ

1

Вы пытаетесь сохранить два отношения в одно время. AFAIK, это не сработает.

Сначала необходимо сохранить сообщение пользователю, а затем сохранить ответ на сообщение.

$request->user()->posts()->save($post); 
$post->answers()->save($answer); 

UPDATE

OP нуждается в user_id сохраненный в answers таблицы, поэтому мы должны сохранить эти отношения, а также. С помощью двух строк кода выше, $answer ничего не знает о пользователе, только родитель $post не знаю, - поэтому мы должны явно указать $answer, что он принадлежит к user:

$request->user()->answers()->save($answer); 
+0

Я пробовал ваше решение, но снова только пост_ид хранится в БД. –

+0

где нужно сохранять 'user_id'? Требуется ли '$ answer'' user_id'? Если это так, вам также нужно сохранить это отношение: '$ request-> user() -> answer() -> save ($ answer);' – swatkins

+1

Это сработало ... Спасибо. Но я хотел бы упомянуть, что и то, и другое будут работать, следующим образом: $ request-> user() -> answers() -> save ($ answer); $ post-> answers() -> save ($ answer); –

0

Вы, возможно, придется добавить это к моделям:

Post.php:

protected $fillable = [ 
    ... 
    'post_id', 
    ... 
]; 

Или необходимые поля, удачи.

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