问题
我有三个表,shopsproductsproduct_shop作为透视表。ShopProduct是使用belongsToMany关联的(多对多)。在数据库中插入新的Product时,在我的表单中,我可以为每个Shop指定一个价格。提交表单时,product_idshop_id's将被插入到pivot表中,并显示它们的相关价格。
我的问题是,当指定shop_id时,如何从透视表中仅检索产品的价格?最终,我的目标如下所述,可能会有更好的解决方案。
解释
此外,我需要这个的原因如下。我还有一张桌子。在我的categories中,我想做这样的事情:

@foreach($categories as $category) // All categories
    {{ $category->name }} // Display the name of the category

    @foreach($category->products as $product) // Loop through all related products for each category
        {{ $product->name }}
        {{ $product->price }}
    @endforeach

@endforeach

现在的诀窍是,价格来自透视表。我想根据index view显示上面的内容。理想情况下,我只想创建一个查询,在其中选择所需的所有内容,然后在foreach中使用该集合,因此不必在视图中使用特定的方法。所以基本上我需要的是这样的东西:
select
    categories->with('products') // Select all categories while eager loading the products
    price // Collected from the pivot table where the shop_id is equal to the given shop_id

数据库表
CREATE TABLE `categories` (
`id`,
  `user_id`,
  `name`,
  `created_at`,
  `updated_at`
)

CREATE TABLE `shops` (
`id`,
  `user_id`,
  `name`,
  `created_at`,
  `updated_at`
)

CREATE TABLE `products` (
`id`,
  `user_id`,
  `category_id`,
  `name`,
  `created_at`,
  `updated_at`
)

CREATE TABLE `product_shop` (
`id`,
  `product_id`,
  `shop_id`,
  `price`,
  `created_at`,
  `updated_at`
)

理想的最终结果(包括从透视表收集的价格):
php - 从数据透视表中获取特定列值-LMLPHP

最佳答案

在product.php(model)文件中定义此关系

public function priceCol($shopId)
{
  return $this->belongsTo(ProductShop::class,'product_id')->where('shop_id',$shopId);
}

用于检索特定产品的价格
$product = Product::find(1);
$price = $product->priceCol($shopId)->price;

09-15 16:37