0

我正在构建一个平台,用户可以在其中注册并添加要销售的产品。另一个用户也可以购买列出的产品。当买家下订单时,我希望列出产品的卖家(用户)看到它。现在所有用户都可以看到所有订单,即使他们不是卖家。

我不知道如何进行,但这是我的

产品控制器中的订单功能

 //Orders View Function
public function viewOrders(){
    $orders = Order::with('orders')->orderBy('id','Desc')->get();
    return view('orders')->with(compact('orders'));
 }

任何帮助将不胜感激。

4

3 回答 3

0

在您的数据库表中,orders建议您有 2 个 ID,一个表示买方,另一个表示卖方,即,每当用户下订单时,它必须是买方,然后将其(买方)ID 插入buyer_id订单表中,同样,product_id从产品表中表示产品的应该在那里,并且从产品表中你可以得到seller_id建议在那里表示哪个卖家拥有特定产品。插入seller_id订单表并将其用于您的查询:

$seller = Order::where('seller_id',$variable_for_product_id)->with('orders')->get();

对您订单表中的所有卖家执行此操作

于 2019-07-04T02:05:44.400 回答
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'));
}
于 2019-06-13T22:35:46.880 回答
0

您的viewOrders操作应该隐藏在身份验证过程之后(显然,用户必须先登录才能查看他的订单)。一旦你这样做了(使用auth中间件作为它的路由),Laravel 可以为你解析经过身份验证的用户 - 你可以简单地将它作为你viewOrders操作的参数提示:

public function viewOrders(User $user)
{
    $orders = $user->orders()->orderBy('id', 'desc')->get();

    return view('orders')->with(compact('orders'));
}

如您所见,我在这里稍微修改了您的查询。我们现在不是选择所有订单,而是通过经过身份验证的用户与其订单的关系来选择它们。订单明明是属于用户的,但是通过产品(作为中介)——一个用户可以有很多产品,一个产品可以有很多订单,因此一个用户可以有很多订单。在 Laravel 中,这种 eloquent 模型之间的关系称为HasManyThrough。因此,您应该在User模型中声明它:

class User extends Model {
    ...

    public function orders()
    {
        return $this->hasManyThrough(Order::class, Product::class);
    }
}

请注意,您Product可能也有orders()关系,但它将是HasMany类型,因为它是没有任何中间体的直接关系。

于 2019-06-13T21:56:11.110 回答