たとえば、ある製品と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;
_
シェイク・ヒーラが説明したように。
BaseProduct
の子を取得するには、次のことを試してください。
$bp = BaseProduct::with('Products')->get();
これで、BaseProduct
のコレクションがあるので、次のようなものを使用できます。
$bp->first()->products
またはコレクションから2番目のアイテムを取得します
$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;
更新:テーブル構造は次のようになります。
Table: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");
}
$product = Product::find('id');
$baseProduct = $product->baseProduct()->getModel();
$baseProducts->products()->getModels();