我正在建立一个平台,用户可以在该平台上注册并添加要销售的产品。另外,另一个用户可以购买列出的产品。当买家下订单时,我希望列出该产品的卖家(用户)能看到它。现在,所有用户都可以看到所有订单,即使他们不是卖家。
我不知道如何进行,但这是我的
产品控制器中的订购功能
//Orders View Function
public function viewOrders(){
$orders = Order::with('orders')->orderBy('id','Desc')->get();
return view('orders')->with(compact('orders'));
}
任何帮助将不胜感激。
答案 0 :(得分:0)
您的viewOrders
操作应隐藏在身份验证过程的后面(显然,用户必须先登录才能查看其订单)。完成此操作(使用auth
中间件进行路由)后,Laravel可以为您解析经过身份验证的用户-您只需将其提示为viewOrders
操作的参数即可:
public function viewOrders(User $user)
{
$orders = $user->orders()->orderBy('id', 'desc')->get();
return view('orders')->with(compact('orders'));
}
您注意到,这里我对查询做了一些修改。现在,我们不再通过选择所有订单,而是通过经过身份验证的用户与其订单的关系来选择它们。订单显然属于用户,但是通过产品(作为中间产品)-一个用户可以拥有很多产品,一个产品可以拥有很多订单,因此一个用户可以拥有很多订单。在Laravel中,雄辩的模型之间的这种关系称为HasManyThrough。因此,您应该在User
模型中声明它:
class User extends Model {
...
public function orders()
{
return $this->hasManyThrough(Order::class, Product::class);
}
}
请注意,您的Product
也可能具有orders()
关系,但是它是HasMany
类型的,因为它是直接的,没有任何中介。
答案 1 :(得分:0)
根据需要过滤查询
示例:
模型关系
public function orders(){
return $this->hasMany(Order::class);
}
public function getMyOrders(User $user){
$orders = Order::with('orders')->orderBy('id','Desc')->where('user_id','=', $user->id)->get();
return view('orders')->with(compact('orders'));
}
要获取卖家订单
public function getSellerOrders(User $user){
$products = Product::where('user_id', '=', $user->id)->get();
$orders = [];
foreach($products as $product){
array_merge($orders, $product->order);
}
return view('orders')->with(compact('orders'));
}
答案 2 :(得分:0)
在orders
的数据库表中,建议您有2个ID,一个ID表示买方,另一个ID表示卖方,即,当用户下订单时,它必须是买方,然后插入它(买方)到订单表buyer_id
中的ID,类似product_id
用来表示产品表中的产品,从产品表中您可以得到seller_id
,建议在那里进行表示哪个卖家拥有特定产品。将seller_id
插入“订单表”中,并将其用于查询:
$seller = Order::where('seller_id',$variable_for_product_id)->with('orders')->get();
对订单表中的所有卖家执行此操作