如何从数据透视表中删除一行

Posted

技术标签:

【中文标题】如何从数据透视表中删除一行【英文标题】:How to delete a row from pivot table 【发布时间】:2020-11-18 22:28:01 【问题描述】:

我想删除数据透视表中的一行,但没有任何变化,所以有人可以帮我解决这个问题吗?我有这样的数据透视表:

public function up()
    
        Schema::create('group_list', function(Blueprint $table)
        
            $table->integer('group_id');
            $table->integer('id');
            $table->primary(['group_id','id']);
        );
    

我的第一个模型:

class AddressBook extends Model

    public function addressbookgroups()
        
        return $this->belongsToMany(AddressBookGroup::class, 'group_list', 'id', 'group_id');
    
...

我的第二个模型:

class AddressBookGroup extends Model

      
    public function addressbooks()
        return $this->belongsToMany(AddressBook::class, 'group_list', 'group_id','id');
    
  


在索引刀片中,我想从地址簿刀片中删除一行:

 ....
  <form action=" route('group-list.destroy', $addressbook->id) " method="POST">
     @csrf
     @method('delete')
    <button type="submit" onclick="return confirm('Are you sure you want to delete this?')"
       class="btn btn-danger">Delete</button>
   </form>

最后是我的删除方法:

class AddressBookGroupListController extends Controller

   public function destroy(AddressBook $address_book)
    
        $address_book->delete();
        return redirect('address-book-group-list');
    


【问题讨论】:

阅读文档:laravel.com/docs/7.x/… 【参考方案1】:

如果你想从数据透视表中删除一个条目,你可以借助关系来完成。

$address_book = AddressBook::find($id);

从由上述$address_bookaddress_book_group 组合形成的数据透视表中删除条目,ID 为$address_book_group_id

$address_book->addressBookGroups->detach($address_book_group_id);

删除与$address_book关联的所有数据透视表条目

$address_book->addressBookGroups->detach();

【讨论】:

不,这只是价值。这个$address_book_group 我的意思是这是数据透视表中group_id 列的值 detach() 中,您将在数据透视表中使用的另一个表的键的值作为外键,在您的情况下为“group_id” I want to delete a row in pivot table(来自您的问题)您想从数据透视表中删除一个条目,对吧?正如我在回答中提到的,可以使用 detach 从数据透视表中删除。无论如何,如果您想删除 AddressBook 实例,可能在数据透视表中可能存在正在使用它的条目,因此您需要先删除它们,然后再删除该 AddressBook 实例。 如果您可以在帖子中包含示例和预期结果,那就太好了。这样就更容易理解问题的要求。在您的示例中,请尝试在您的数据透视表中添加条目。 让我们continue this discussion in chat。

以上是关于如何从数据透视表中删除一行的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 laravel 删除数据透视表中的单行

如何删除EXCEL表中的大量数据行,要删除的行数大概8万

如何使用 vba 从具有多个数据字段的 excel 数据透视表中删除小计

excel中数据透视表,如何将空白的地方隐藏掉

从 R 中的数据透视表库呈现的数据透视表中删除小计和总计

如何摆脱数据透视表中的总行和总列