我如何从Laravel中的hasMany()关系中获得所有结果?

2022-08-30 23:23:05

例如,我有一个产品,我有一个基础产品。

在产品的模型中,我指定了以下内容:

//In class Product
public function BaseProduct()
{
    return $this->belongsTo("BaseProduct", "BaseProductId");
}

在基础产品中,我指定了以下关系:

//In class BaseProduct
public function Products()
{
    return $this->hasMany("Product", "ProductId");
}

如果我选择一个产品,就像这样:

$Product::first()

我可以通过执行以下操作来获取基本产品:

$Product::first()->BaseProduct()->get();

我该如何获取 BaseProduct 的数组,而不是从中获取结果数组,这样我就可以获取 BaseProduct 的所有子级,即具有与此 BaseProduct 相关的外键的所有产品。Model

我已经尝试过,但这不是一个有效的方法。BaseProduct()->all();


编辑:

我已经创建了以下函数调用链 - 但它很糟糕。

return BaseProduct::find(Product::first()->BaseProduct()->getResults()['BaseProductId'])->Products()->getResults();

最终编辑:

我在模型中犯了一个错误。在函数中,我指定了应该在哪里。BaseProductProducts()return $this->hasMany("Product", "ProductId");ProductIdBaseProductId

修复后,我可以成功使用:

Product::first()->BaseProduct->products;

正如Sheikh Heera所解释的那样。


答案 1

要获得你的孩子,你可以试试这个: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;

更新:您的表结构应如下所示:

表:基础产品

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");
}

答案 2
$product = Product::find('id');
$baseProduct = $product->baseProduct()->getModel();
$baseProduct->products()->getModels();

推荐