【发布时间】:2021-03-03 20:14:50
【问题描述】:
在我的项目中,所有用户都存储在user 表中。作为供应商的人,他们的用户密钥进入supplier 表。
每个产品都可以有多个变体。关键产品进入productattribute 表。
每个供应商可以有多个具有多个属性的产品。
所以有一个多对多的产品属性和供应商表,名为productsupplier。
我想为用户提供创建新采购订单的选项。 采购订单将针对供应商。
用户将选择供应商,然后分配给他的所有产品都会显示出来。
问题是同名的产品可以有不同的属性。因此,当我为某个供应商的产品编写代码以显示时,一种产品(具有不同的变体)会出现多次。 我一直在努力使用 distinct 或 unique 函数来显示一个产品的名称一次,但由于它在 foreach 循环中,它不工作。
代码如下:
public function new_po_next(Request $request)
{
$product = array();
$supplier = \App\supplier::where('user_id', $request->supplier)->first();
$productsupplier = \App\productsupplier::where('supplier_id', $supplier->id)->get();
foreach ($productsupplier as $ps) {
$productattribute = \App\productattribute::where('id', $ps->productattribute_id)->first();
$prod = \App\product::where('id', $productattribute->product_id)->first();
$product [] = [
'prod_supp_id' => $ps->id,
'prod_supp_prodattid' => $ps->productattribute_id,
'prod_supp_cost' => $ps->cost,
'prod_att_id' => $productattribute->id,
'prod_att_color' => $productattribute->color_id,
'prod_att_size' => $productattribute->size_id,
'prod_att_material' => $productattribute->material_id,
'prod_att_prodid' => $productattribute->product_id,
'prod_id'=>$prod->id,
'prod_name' =>$prod->name,
];
}
$status = $request->status;
$deldate = $request->deldate;
$discount = $request->discount;
return view("vendor.new-po-next")
->with('status', $status)
->with('deldate', $deldate)
->with('discount', $discount)
->with('product', $product);
}
此代码给出以下结果(这是正确的结果,因为 product1 只有 1 个变体,但 product5 有 3 个变体)。
我想要的是它显示“product1”和“product5”(product5 ONCE only)。 如果用户选择 product5,那么它会显示可供选择的其余变体。
请告诉我怎么做!
【问题讨论】:
-
第一个问题,你们的模型之间的关系是什么?为什么你不能只做
$productsupplier->productattributes而不是在循环中遍历所有这些数据库查找? -
productattribute 键正在进入 productsuppliers 表。
-
我照你说的做了,它给出了这个错误:Property [productattributes] does not exist on this collection instance.
-
当然不是,如果你还没有建立适当的关系。
-
productattribute 键正在进入 productsuppliers 表。这不正确吗?