我希望在表格中插入多个列值并回答问题。我在问题表中插入了一个问题表,该表已成功插入。
但它现在没有插入auth:user()id,返回' 0'在表格中
answercontroller代码:
<?php
namespace App\Http\Controllers;
use App\questions;
use Illuminate\Http\Request;
use Auth;
use App\Http\Requests;
class answerController extends Controller
{
public function store($question_id,Requests\answerAddRequest $request)
{
Auth::user()->questions()->findOrFail($question_id)->first()->answers()->create($request->all());
}
}
如果我删除了questions()->findOrFail($question_id)->first()
部分,它会插入auth :: id,但是没有这个,我该如何解决?
答案 0 :(得分:1)
这是因为当使用相关模型创建模型时,Laravel会自动填充外键。 就像我分割你的查询一样,它看起来像:
$user = Auth::user();
$question = $user->questions()->findOrFail($question_id)->first();
$question->answers()->create($request->all());
此处答案模型由$question
模型对象创建,因此它会自动填充question_id,但不会填充user_id,因为它不是使用$user
创建的。
但是如果你把你的代码写成:
$user->answers()->create($request->all());
它将自动填充user_id字段。
<强>更新强>
要填写question_id,您可以写为:
$inputs = $request->all();
$inputs['question_id'] = $question_id;
$user->answers()->create($inputs);
答案 1 :(得分:0)
如果用户ID在answers
表中,为什么不这样做:
$request->user_id = auth()->user()->id;
$request->question_id = $question_id;
Answer::create($request->all());
这将只创建一个查询,它更具可读性和可维护性。保持简单。