首页 > 解决方案 > 模型:独立或“影子副本”——我的关系是我能做到的最好的吗?

问题描述

我想听听您对我当前问题的看法。

我有一个模型,叫做Product这个产品属于一个类别,并且有一些信息,比如标签、属性等。

现在其他模型喜欢InvoiceOrder可以使用Positions. 每个职位都与一个产品有关。

重要的是:这个position-bound-product是原始Product模型及其所有关系的副本(这很重要:如果原始产品发生变化,与位置关联的产品不能改变)。

所以:

现在我试图找出处理这个问题的最佳方法。

目前我正在这样做:

<?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无需在“产品列表视图”上显示这些副本。

你怎么看?有没有更好的方法来让它工作?

标签: laraveleloquent

解决方案


推荐阅读