如何从数据透视表中删除一行
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_book
和address_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。以上是关于如何从数据透视表中删除一行的主要内容,如果未能解决你的问题,请参考以下文章