たとえば、Product と 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();
そこから結果の配列を取得する代わりに、Model
BaseProduct の を取得して、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;
シェイク・ヒーラが説明した通りです。
ベストアンサー1
子を取得するには、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;
アップデート:テーブル構造は次のようになります。
テーブル:基本製品:
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");
}