Eloquent 自定义数据透视表中的关系 table

Eloquent relationship in custom pivot table

我可能把事情复杂化了,但这是我试图在 Eloquent (Laravel 5) 中写的关系:

我有一份产品清单和价目表。每个产品可以有多个价目表。这很容易做到,但还有另一件事 - 对于每个产品 <> 价目表分配,我可以有很多基于数量的价格,所以它就像:

productID: 1010
priceListId: 1

min quantity: 1 -> price 10.00
min quantity: 5 -> price 9.50
min quantity: 10 -> price 9.00

productID: 1010
priceListId: 2

min quantity: 1 -> price 15.00
min quantity: 40 -> price 14.00
min quantity: 90 -> price 12.00

我想我知道如何创建自定义数据透视表 table 虽然我不知道如何使用它。我关注了 this link 现在我不确定我的代码是否正确以及如何使用它。

目前我有:

产品型号:

class Product extends Model {

    public function pricelists()
    {
        return $this->belongsToMany('PriceList');
    }

    public function newPivot(Model $parent, array $attributes, $table, $exists)
    {
        if ($parent instanceof PriceList)
        {
            return new ProductPricePivot($parent, $attributes, $table, $exists);
        }

        return parent::newPivot($parent, $attributes, $table, $exists);
    }

}

价目表模型:

class PriceList extends Model {

    public function products()
    {
        return $this->belongsToMany('Product');
    }

    public function newPivot(Model $parent, array $attributes, $table, $exists)
    {
        if ($parent instanceof Product)
        {
            return new ProductPricePivot($parent, $attributes, $table, $exists);
        }

        return parent::newPivot($parent, $attributes, $table, $exists);
    }
}

枢轴:

class ProductPricePivot extends Pivot {

    public function product()
    {
        return $this->belongsTo('Product');
    }

    public function pricelist()
    {
        return $this->belongsTo('PriceList');
    }

    public function prices()
    {
        return $this->hasMany('ProductPrice');
    }

}

现在 ProductPrice 再次扩展了 Model 并且只是一个没有任何额外方法的标准模型。

这是正确的吗?如果是这样,那么按照上面的示例,如何将新的 quantity/price 级别添加到产品 1010 的价目表 1 中?

目前,在建立关系时,我正在做:

$productID = 1010;
$priceListID = 1;

$priceList = PriceList::find($priceListID);
$priceList->products()->attach($productID);

$productToPriceList = $priceList->products()->find($productID);

我在这里迷路了...我找到了这种关系,但我现在如何将下一个数量 <> 价格水平附加到它?

有人可以举例说明如何使用这种关系或链接到我可以找到更多相关信息的页面吗?是的,我检查了 Laravel 文档,是的,我也用谷歌搜索了它。

谢谢!

正如您所描述的情况,我在这里看到两种类型的关系:

  1. 多对多 ProductPriceList
  2. 之间的关系
  3. PriceListProductPrice 之间的多对一 关系(包含 "min-quantity" 和 "price")值.

我假设许多 "price-list" 不需要相同的价格条件。每个列表都会有它的价格条件。

多对一关系不需要主元table。

关注this link,你会发现laravelEloquent系统对你帮助很大

您需要 4 tables: products, price_lists, product_prices, products_to_pricelists (the pivot)

products_to_pricelists table 看起来像这样:

*====*============*===============*
| id | product_id | price_list_id |
*====*============*===============*

现模型:

产品:

class Product extends Eloquent {

    protected $table = 'products';

    public function price_lists()
    {
        return $this->belongsToMany('PriceList', 'products_to_pricelists', 'price_list_id');
    }

}

价目表:

class PriceList extends Eloquent {

    protected $table = 'price_lists';

    public function prices()
    {
        return $this->hasMany('ProductPrice');
    }

}

价格:

class ProductPrice extends Eloquent {

    protected $table = 'product_prices';

}

现在很简单:

$productID = 1010;
$list_id = 1;
$theProduct = Product::find( $productID );
$theProductPriceLists = $theProduct->price_lists; // Don't use parens
$theList = Product::find( $productID )->price_lists()->where('price_lists.id', $list_id)->first(); // Here you use parens
$theListPrices = $theList->prices; // Again no parens

Laravel 只为你管理枢轴连接!

希望对您有所帮助