如何在一个单元格中保存多个外键

Posted

技术标签:

【中文标题】如何在一个单元格中保存多个外键【英文标题】:how to save many foreign key at one cell 【发布时间】:2022-01-17 17:12:55 【问题描述】:

我在mysql上有两个表

项目表

Id item_name room_id other column
1 table 1
2 book 2
3 clock 2

房间桌

id room_name
1 Teacher room
2 class room

我有一个案例,一件物品可以放在几个房间里,

我被要求不要复制数据如下

Id item_name room_id other column
1 table 1
2 table 2

如何在一行中存储 room_id 有很多这样的值

Id item_name room_id other column
1 table 1,2

我用一个字符串完成了它,然后我用explode()提取了它,但是在mysql表中我不能再连接到房间表了

【问题讨论】:

不要在第二个表中使用item_name,而在第二个表中只使用id。因为您已经拥有第一个表中的 item_name。 【参考方案1】:

您可以通过使用数据透视表来实现这一点

桌子:item_room 列:item_id、room_id

模型应该是这样的

namespace App\Models;

class Item extends Model

    public function rooms()
    
        return $this->belongsToMany(Room::class)->using(ItemRoom::class);
    


namespace App\Models;

class Room extends Model

    public function items()
    
        return $this->belongsToMany(Item::class)->using(ItemRoom::class);
    


namespace App\Models;

class ItemRoom extends Pivot

    


# you can get data using eager loading, querying relation, etc.
$room = Room::find(1);
foreach($room->items() as $items)
    //todo


$item = Item::find(1);
foreach($item->rooms() as $items)
   //todo

【讨论】:

不需要数据透视类。有一个数据透视表是必要的。

以上是关于如何在一个单元格中保存多个外键的主要内容,如果未能解决你的问题,请参考以下文章

如何在单个单元格中插入多个超链接?

如何将多个单元格中的字符串聚合到一个单元格中?

如何根据多个单元格中的值自动填充

如何根据单元格的所有可能值保存多个电子表格?

如何使自定义单元格中的 UILabel 显示保存在 UITableView 中的更改

如何从谷歌电子表格中动态变化的单元格中保存最小值和最大值?