如何在买卖双方Laravel之间分割订单?

时间:2019-06-13 20:23:26

标签: php laravel laravel-5 eloquent eloquent--relationship

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

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

产品控制器中的订购功能

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

任何帮助将不胜感激。

3 个答案:

答案 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();

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