微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

PHP-从数据透视表中获取特定的列值

问题

我有三个表,商店,产品和product_shop作为数据透视表.商店和产品通过一个belongsToMany(多对多)进行关联.在将新产品插入数据库时​​,可以在我的表格中为每个商店指定价格.提交表单时,会将product_id和shop_id及其相关价格插入到Pivot表中.

我的问题是,当指定shop_id时,如何仅从数据透视表中检索产品的价格?最终,下面描述了我的目标,对此可能会有更好的解决方案.

说明

此外,为什么我需要这样做如下.我也有一个类别表.在索引视图中,我想执行以下操作:

@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

现在的诀窍是价格来自数据透视表.我想根据shop_id显示以上内容.理想情况下,我只想创建一个查询,在其中选择所需的所有内容,然后在我的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`
)

理想的最终结果(包括从数据透视表中收集的价格):

with the price entered

解决方法:

在您的product.PHP(模型)文件中定义此关系

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

用于获取特定产品的价格

$product = Product::find(1);
$price = $product->priceCol($shopId)->price;

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。