当前位置: 首页 > 知识库问答 >
问题:

Laravel复选框问题,我无法更新数据透视表

阳航
2023-03-14

我正在做一个拉拉维尔应用程序。在laravel中,我试图更新透视表中的一行。在此应用程序中,我有三个表:

问题:id,标题,描述

类别:id、名称

category_issues:(pivot table)id,issue_id,category_id

在laravel中,我试图更新透视表中的一行。我有以下关系:
issue.php

public function categories(){
return$this->bongstomany('app\category','category_issues');
}

category.php

public function issues(){
return$this->bongstomany(“app\issue”,“category_issues”);
}

一个问题可以有许多类别。

显示类别部分的Html代码:

<div class="form-group row">
                    <label for="category" class="col-md-4 col-form-label text-md-right">{{ __('Category :') }}</label>
                    <div class="form-check col-md-6">
                      @foreach ($categories as $category)

                        <input type="checkbox" name="category[]" id="{{ $category->id }}" value="{{ $category->id }}"
                        {{ in_array($category->id, $issue->categories->pluck('id')->toArray())  ? 'checked' : '' }}>

                        <label for="{{ $category->id }}"> {{ $category->name }} </label>
                      @endforeach
                    </div>
                  </div>

下面是更新函数文件:

public function update(Issue $issue)
{
  request()->validate([
      'title'=> ['required', 'min:3'],
      'description'=> ['required', 'min:3'],
      'category' => ['required']
    ]);
  $issue->title = request('title');
  $issue->description = request('description');
  $issue->save();

  //Category_Issue Update
    $categoryIssue = new CategoryIssue;
    $cats = request('category');

     foreach ($cats as $cat) {
       $categoryIssue->updateOrCreate([
         'issue_id'=> $issue->id,
         'category_id' => $cat
       ]);
     }
     return redirect('issues')->with('success', 'Issue has been updated');
}

共有1个答案

卓雅达
2023-03-14

Laravel不是在CategoryIssue模型上进行创建/更新(您甚至有CategoryIssue模型吗?),而是通过sync()方法轻松地一次更新关系的枢轴。您已经根据上面的代码正确地设置了关系。

update()方法中,您已经有了问题模型,并已将其保存。通过$request对象从表单中输入了一组类别(如果用户没有选择任何,则为无),因此可以如下所示更新数据透视:

$issue->categories()->sync($request->get('category', []));

保留空数组作为第二个参数是可选的。一个小建议:也许把字段的名字放在'categories'表单上,而不是'categories'表单上,以便于记住它是一个数组。

 类似资料:
  • 我正在尝试使用复选框进行标记删除。假设用户有大约10个产品,每个产品都有3个不同的标签。 当前用户只能删除单个标记。每次标记删除后,页面刷新,他可以删除另一个标记。这不是真正的用户友好。这就是为什么我尝试对标记进行多重选择,并在单击一个按钮时删除所有选定的标记。 这就是它现在的样子: 我的问题是我需要产品id标签id来分离它们。 如果按delete(删除)按钮,则会将此数据传递到控制器: 主要的问

  • 我有如下复选框: 控制器中: 当复选框值为1,然后我可以编辑,但当复选框值为0,然后我得到错误:SQLSTATE[01000]:警告: 1265数据截断为列类型在行1(SQL:更新set=0,。=2021-10-10 15:48:36其中=1) 数据库表中字段的类型-enum('0','1')

  • 事实上,我的问题很简单,但我找不到任何答案。 我使用的是Laravel Elotent,我有3张桌子: 一个数据透视表叫做: 我已经从我的公司对象中获得了,我正在尝试获取

  • 我有一个有两个透视表的表单。其中一个工作很好,但我似乎不能使第二个工作,尽管他们是相当相似的。不起作用的是一个名为'photos'的图像表和名为'releases'的表单上载。我使用“photo_id”和一个“release_id”字段将数据透视表称为“photo_releases”。 数据库透视表 下面是发布模式 和照片模式 和ReleaseController 此函数中使用了两个透视表。使用

  • 我有表,和透视表。表只有两个字段和。 当我添加一个问题时,它还会将相应的值插入透视表。 假设我更改表单中的问题标记并保存,它应该更新透视表的值。如何更新透视表?我是拉威尔的新手。我试过类似的东西 但在我的例子中,pivot表中并没有额外的属性 问题模型 标签模型

  • 问题内容: 我是Laravel的新手。我正在开发laravel 5应用程序,并且卡在这里。我有2个这样的模型: 消息和用户之间存在多对多关系,因此给我一个数据透视表: 我有这样的SQL查询: 如何将此查询转换为laravel对等词? 问题答案: 下面的代码解决了我的问题: