我现在有4张表:
accessories
id
products
id
product_accessory
id
product_id
accessory_id
product_accessory_adaptor
id
product_accessory_id 将它们映射到有说服力的模型可以给我
自定义透视表模型:
class ProductAccessory extends Pivot {
protected $table = 'product_accessory';
public function product()
{
return $this->belongsTo('Product');
}
public function accessory()
{
return $this->belongsTo('Accessory');
}
public function adaptors() {
return $this->hasMany('Adaptor', 'product_accessory_id');
}
}产品和附件模型
class Accessory extends Eloquent {
public function products()
{
return $this->belongsToMany('Product', 'product_accessory', 'accessory_id', 'product_id')->withPivot();
}
public function newPivot(Eloquent $parent, array $attributes, $table, $exists)
{
if ($parent instanceof Product) {
return new ProductAccessory($parent, $attributes, $table, $exists);
}
return parent::newPivot($parent, $attributes, $table, $exists);
}
public function adaptors()
{
return $this->hasManyThrough('Adaptor', 'ProductAccessory', 'accessory_id', 'product_accessory_id');
}
}
class Product extends Eloquent {
public function accessories()
{
return $this->belongsToMany('Accessory', 'product_accessory', 'product_id', 'accessory_id')->withPivot();
}
public function newPivot(Eloquent $parent, array $attributes, $table, $exists)
{
if ($parent instanceof Accessory) {
return new ProductAccessory($parent, $attributes, $table, $exists);
}
return parent::newPivot($parent, $attributes, $table, $exists);
}
public function adaptors()
{
return $this->hasManyThrough('Adaptor', 'ProductAccessory', 'product_id', 'product_accessory_id');
}
}适配器型号:
class Adaptor extends Eloquent {
protected $table = 'product_accessory_adaptor';
public function productAccessory() {
return $this->belongsTo('ProductAccessory');
}
}这就是我需要的。急切地装载所有产品与配件与适配器属于他们的枢轴。我试过这样的东西,但我不知道如何传递轴心id
在产品模型中
public function accessories()
{
return $this->belongsToMany('Compatibility\Accessory', 'product_accessory', 'product_id', 'accessory_id')
->withPivot('id', 'accessory_disclaimer')
->withTimestamps()
->with(['adaptors' => function ($q) {
$q->where('product_accessory_id', $this->pivot->id);
}]);
}有谁知道怎么做吗?我应该用$this->pivot->id替换什么?
发布于 2014-07-28 21:21:34
不需要立即加载与pivot模型相关的任何内容。这样是行不通的,所以我建议这样做:
$products->load('ProductAccessory.accessory', 'ProductAccessory.adaptors');
// then you access related accessory and adaptors through the pivot model
$product = $products->first();
$product->productAccessory->accessory;
$product->productAccessory->adaptors;
// Product model
public function productAccessory()
{
return $this->hasMany('ProductAccessory');
}注意:ProductAccessory应该扩展Eloquent (Model),而不是Pivot --就像我之前回答你的问题那样。
这是在一个地方有这个的方式,即。获取相关附件和相关适配器。
否则,您将需要这样的代码:
$product->accessory; // accessory model, so far so good
$product->adaptors; // all adaptors, not so good anymore
// to get adaptors for the accessory we need:
$accessories = $product->adaptors()->where('product_accessories.id', $product->accessory->pivot->id)->get();不太方便..
https://stackoverflow.com/questions/24995629
复制相似问题