laravel - 模型:独立或“影子副本”——我的关系是我能做到的最好的吗?
问题描述
我想听听您对我当前问题的看法。
我有一个模型,叫做Product
这个产品属于一个类别,并且有一些信息,比如标签、属性等。
现在其他模型喜欢Invoice
或Order
可以使用Positions
. 每个职位都与一个产品有关。
重要的是:这个position-bound-product是原始Product
模型及其所有关系的副本(这很重要:如果原始产品发生变化,与位置关联的产品不能改变)。
所以:
Product
:描述产品(“独立”)Position
:描述附加到报价、订单或发票的职位。一个职位有一个相关的产品,即原始产品的副本。此副本可能不会显示在产品的索引页面上。
现在我试图找出处理这个问题的最佳方法。
目前我正在这样做:
<?php
namespace App;
use App\Traits\FieldTrait;
/**
* Class Product
*
* @package App
*/
class Product extends Model
{
/**
* @param $query
*
* @return mixed
*/
public function scopeWithoutShadowCopies($query): mixed
{
return $query->where('position_id', null);
}
/**
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo
*/
public function position(): BelongsTo
{
return $this->belongsTo(Position::class);
}
/**
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo
*/
public function category()
{
return $this->belongsTo(Category::class);
}
}
这样,我可以添加“只是”产品的产品,并且可以添加属于某个职位的产品。这些产品可以通过使用隐藏Product::withoutShadowCopies()->get()
。
这使我可以创建Position
并创建模型的“影子副本”,而Product
无需在“产品列表视图”上显示这些副本。
你怎么看?有没有更好的方法来让它工作?
解决方案
推荐阅读
- javascript - 我需要为计算机科学制作摇滚、剪纸,但我需要添加蜥蜴和史波克
- while-loop - 如何在与线程计划下线程数相同的控制器中执行
- java - 在 Android 上启动 Appium 时出现以下错误:
- java - 在spring数据中创建动态查询
- sql - 通过另一列的键值组合一列中的值
- angular - 脚本应该放入 angular.json 还是 index.html?
- angular - Angular 表单按钮在验证表单后未启用
- ruby - Ruby Time.parse 错误地返回字符串的时间戳
- javascript - 在对象内部的函数内部使用函数
- c# - 如何从拆分结果c#中获取我想要的字符串