【问题标题】:Laravel - how to create and update fields from multiple tables relation laravel?Laravel - 如何从多个表关系 laravel 创建和更新字段?
【发布时间】:2018-07-14 19:22:28
【问题描述】:

我有来自两个模型的关系,当用户创建评论时,我需要将评论存储在一个表中并更新另一个表中的状态字段,这应该在同一个表单中提交评论。我收到错误未定义变量:id

我的控制器

 public function reply($id)
    {
    if (Auth::check())
        {
        $issue = Issue::where('user_id', Auth::id())->where('id', $id)->firstOrFail();
        $company = $issue->company;
        $interaction = $issue->interaction;
        return view('issues.reply', compact('issue', 'company', 'interaction'));
        }
      else
        {
        return redirect()->guest('/logon');
        }
    }

public function postComment(Request $request)
    {
    $this->validate($request, ['description' => '']);
    $interaction = IssueInteraction::create(['issue_report_id' => $request->input('issue_report_id') , 'user_id' => Auth::user()->id, 'description' => $request->input('description') , 'owner' => 'USER', ]);
    if ($interaction->save())
        {
        $issue = Issue::where('id', $id)->findOrFail->id;
        $issue->updateOrCreate->status = $request->status;
        $issue->save();
        }

    $interaction->created_at = date('Y-m-d H:i:s.u');
    return redirect()->back()->with("status", "Your reply has be submitted.");
    }

我的路线

Route::get('/account/issues/{id}', 'IssueInteractionController@reply');
Route::post('interaction', 'IssueInteractionController@postComment');

我的表单

 <form class="form-secondary" action="{{ url('/interaction') }}" method="POST">
   {!! csrf_field() !!}
   <input type="hidden" name="issue_report_id" value="{{ $issue->id }}">
   <textarea rows="10" id="description" class="form-control" name="description"></textarea>
   <input type="hidden" id="status" name="status" value="2">
   <button type="submit" class="btn btn-lg btn-block btn-primary shadow mt-4">@lang('app.Send Reply')</button>
</form>

提前致谢,

【问题讨论】:

  • 在哪一行(文件)?提供准确的错误信息。
  • $issue = Issue::where('id', $id)-&gt;findOrFail-&gt;id; 你实际上并没有在任何地方设置$id 变量,这就是你得到错误的原因。
  • 看来你是对的,但我尝试了一切,但我无法让它工作,当用户从他们有关系的表单交互模型创建评论时,我需要从问题模型更新列状态,它是存储交互和评论,但不更新问题模型的状态。

标签: php laravel laravel-5.5


【解决方案1】:

我认为这就是您希望在 postComment() 方法中更改的内容。即如果issue_report_id是Issue模型的id对应的key。

    $issue = Issue::where('id', $interaction->issue_report_id)->first()->id;

【讨论】:

  • 我尝试使用此代码,但它给了我一个错误 Undefined property: Illuminate\Database\Eloquent\Builder::$findOrFail
  • 我更新了代码。我忘了把 findOrFail 改成 first()。
  • 感谢您的回复,但现在我收到错误尝试修改行 $issue->updateOrCreate->status = $request->status; 的非对象属性;我尝试了很多东西,但似乎没有任何效果:(
  • 应该是 $issue->updateOrCreate(['status' => $request->status]);如果这不起作用,请编码 dd($request);并在此处发布输出。我们即将让它发挥作用。
  • 感谢您的帮助,我使用 Issue::where('id', $interaction->issue_report_id)->update([ "status" => $request->status, ]);奇迹般有效! :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多