Laravel 多对多关系在哪里保存项目总数? [关闭]
Posted
技术标签:
【中文标题】Laravel 多对多关系在哪里保存项目总数? [关闭]【英文标题】:Laravel ManyToMany relations where to save item total? [closed] 【发布时间】:2020-06-18 12:01:29 【问题描述】:需要建议多对多关系的最佳做法是在哪里保存项目总计列? 例如。我有用户和库存表,它们通过数据透视表连接,在数据透视表中我也有附加库存的列总数。 这是正确的方法还是有人可以建议我哪种方法是最好的方法?
数据库结构
【问题讨论】:
尚不清楚用户和库存之间的关系。你能简单介绍一下这段关系吗? 例如我的任务:我有 10x 'A' 库存,我想从这 10 个中给用户 5x 'A',我必须在哪里保存这 5x 数量值?我认为在数据透视表中保存此库存 5 次将是不正确的解决方案。 【参考方案1】:我可以建议:
1) 使这对外键唯一(user_id
,inventory_id
)以防止重复
2) 为您的数据透视表制作一个单独的模型:App\InventoryUser
3) 使用updateOrCreate
Laravel Elequent 函数
根据ElequentDocs
updateOrCreate 将更新现有模型或创建新模型(如果没有) 存在
例如
$oldTotal = InventoryUser::where(['user_id' => 'x', 'inventory_id' => 'y'])->select('total') ?? 0;
$inventoryUser = InventoryUser::updateOrCreate(
['user_id' => 'x', 'inventory_id' => 'y'],
['total' => $oldTotal+1]
);
甚至更好
$inventoryUser = InventoryUser::updateOrCreate(
['user_id' => 'x', 'inventory_id' => 'y']
)->increment('total'); // You must Set DEFAULT value to (0) for total column in your database
【讨论】:
在数据透视表中存储数据是否正确? 是的,没关系,这里看Laravel自己提供的例子laravel.com/docs/6.x/… 有没有办法从像foreach ($user->inventory as $item) $item->total;
这样的数据透视表中获取数据?
当然可以,但是请记住 many -- many
关系 == 1--many--1
。换句话说,您可以在User
Model 和InventoryUser
Pivot Model 之间定义一对多的关系。然后您可以访问数据透视表,例如:$user->relationName->total
是的,但是该用户可能拥有超过 1 个相关库存。当我将建立一对多关系并调用 $user->relationName->total 时,它将返回许多库存。例如,我需要获取有多少(来自枢轴的列总数)x 库存有用户。以上是关于Laravel 多对多关系在哪里保存项目总数? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章