gpt4 book ai didi

php - Laravel:只有 2 个表的多对多关系

转载 作者:行者123 更新时间:2023-11-28 23:49:17 25 4
gpt4 key购买 nike

我正在尝试在一个小软件中实现标记功能,为了简单起见,我实际上只想使用两个表,就像这样:

items (first table)
- id (int)
- title (string)
- description (string)

item_tag (second "pivot" table)
- item_id (int, foreign key to item.id)
- tag_name (string (!))
(primary_key(item_id, tag_name))

与模型

<?php

class Item extends Eloquent {
protected $fillable = array('title', 'desription');

public function tags() {
return $this->belongsToMany('Tag', 'item_tag', 'item_id', 'tag_name');
}
}

<?php

class Tag extends Eloquent {
protected $fillable = array('tag_name');

public function items() {
return $this->belongsToMany('Item', 'item_tag', 'item_id', 'tag_name');
}
}

但是,我似乎无法让它工作,因为 belongsToMany 函数似乎需要三个表,而且 Laravel 似乎需要一个 tags 表。我知道,我只使用两个表的计划并不是很优雅,因为它增加了冗余,但对于我的用例来说仍然是可以接受的。那么有没有什么快速的解决办法呢?

最佳答案

这不是belongsToMany 关系,而是hasMany 关系。每个项目都有很多标签。

这种方法的问题在于,如果将来您想要更改标签的名称或添加额外的字段(例如描述),则必须更新所有带有该标签的数据库行。为标签准备一个专用表格要容易得多,就像这样:

tags
- id (int)
- name (string)

然后像这样设置你的数据透视表:

item_tag
- id (int)
- item_id (int)
- tag_id (int)

这样一来,您可以轻松地更改标签的名称、添加额外的列等等,而无需影响多个条目。

一旦您拥有这三个表(计算您拥有的项目),您的 belongsToMany 关系将起作用,您甚至不必指定主键/表的名称,因为只要您遵循正确的命名方案。

关于php - Laravel:只有 2 个表的多对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32897129/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com