例如,我有一个产品,我有一个BaseProduct。
在产品的模型中,我指定了以下内容:
//In class Product
public function BaseProduct()
{
return $this->belongsTo("BaseProduct", "BaseProductId");
}
在BaseProduct中,我指定了以下关系:
//In class BaseProduct
public function Products()
{
return $this->hasMany("Product", "ProductId");
}
如果我要选择产品,请执行以下操作:
$Product::first()
我可以通过执行以下操作来获取BaseProduct:
$Product::first()->BaseProduct()->get();
我不是从中得到结果的数组,而是如何得到BaseProduct的Model
,所以我可以获得BaseProduct的所有子项,这意味着所有具有与此相关的外键的产品BaseProduct。
我尝试了BaseProduct()->all();
,但它不是一种有效的方法。
编辑:
我创建了以下函数调用链 - 但它很糟糕。
return BaseProduct::find(Product::first()->BaseProduct()->getResults()['BaseProductId'])->Products()->getResults();
最终编辑:
我在BaseProduct
模型中犯了一个错误。在Products()
函数中,我指定了return $this->hasMany("Product", "ProductId");
,其中ProductId
应为BaseProductId
。
我修好后,我可以成功使用:
Product::first()->BaseProduct->products;
正如Sheikh Heera所解释的那样。
答案 0 :(得分:16)
要获得BaseProduct
的孩子,你可以试试这个:
$bp = BaseProduct::with('Products')->get();
现在,你有一个BaseProduct
的集合,所以你可以使用这样的东西:
$bp->first()->products
或者从集合中获取第二项
$bp->get(1)->products
另外,你可以像这样运行一个循环(最常见的是在传递之后的视图中):
// From the controller
$bp = BaseProduct::with('Products')->get();
return View::make('view_name')->with('baseProduct', $bp);
在View
@foreach($baseProduct->products as $product)
{{ $product->field_name }}
@endforeach
更新:是的,您可以试试这个
$product = Product::first();
$baseProduct = $product->BaseProduct;
// Dump all children/products of this BaseProduct
dd($baseProduct->products->toArray());
你可以链接:
Product::first()->BaseProduct->products;
更新:您的表格结构应如下所示:
表格:baseproduct 强>:
id(pk) | some_field | another_field
表:产品:
id(pk) | baseproduct_id(fk) | another_field
根据这个表结构,关系应该是
// BaseProduct
public function Products()
{
return $this->hasMany("Product");
}
// Product
public function Products()
{
// second parameter/baseproduct_id is optional unless
// you have used something else than baseproduct_id
return $this->belongsTo("BaseProduct", "baseproduct_id");
}
答案 1 :(得分:0)
$product = Product::find('id');
$baseProduct = $product->baseProduct()->getModel();
$baseProducts->products()->getModels();