PHP 电子商务订单拆分给卖家 Laravel

PHP e-commerce order split to sellers Laravel

我目前正在使用 Laravel 5.3 构建一个小型网上商店,用户可以在其中注册并添加要销售的产品。然后另一个用户可以搜索产品,将它们放入购物车并购买。然后我将这个订单信息保存到数据库中(2 tables),order(包含(订单的)id),user_id(谁买的)和总计支付金额),然后是 order_items(包含 ID、相关订单 ID 和产品 ID)。

现在我想让卖家和买家都可以查看过去的订单。现在线索来了:向买家展示这个非常简单,因为我只需要检查 orderstable 中的用户 ID 并获取这些。但是seller就没那么容易了,我想了想,因为seller也应该看到"his"的订单,所以买家的订单,包含他的一个或多个产品,BUT:他应该只看到一部分订购他的产品,而不是购买者可能从其他人那里购买的产品。我想你知道我的意思吗?

有什么方法可以解决这个问题 "easily" 或者最佳实践是如何做到的? 基本上我可以创建两个 subtables,称为 sub_orderssub_order_items 之类的,然后为每个卖家创建一个 sub_order(在创建订单后立即创建),但这不太容易实现(我猜),也许还有更好的方法我还没有想到。

有什么想法吗?

这些都是相关的模型:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Order extends Model
{
    public function user()
    {
        return $this->belongsTo('App\User');
    }

    public function orderItems()
    {
        return $this->hasMany('App\OrderItem');
    }
}

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class OrderItem extends Model
{
    protected $table = 'order_items';

    public function product()
    {
        return $this->belongsTo('App\Product');
    }
}

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Product extends Model
{
    //
}

编辑:这是我目前得到的:

$orders = Order::whereHas('orderItems.product', function ($query) {
            $query->where('user_id', '=', \Auth::user()->id);
        })->get();

        return view('order.list',['orders'=>$orders]);

所以这列出了包含至少一种来自卖家的产品的所有订单。当我知道(在该视图中 order.list)单击一个订单时,我可以看到该订单的所有产品,但我只想查看来自该卖家的产品。 这是我显示单个订单的方式:

public function viewOrder($orderId){
        $order = Order::find($orderId);
        return view('order.view',['order'=>$order]);
    }

我现在如何才能只显示订单的相关产品以及这些相关产品的总和?

不确定您如何命名您的模型,但我的想法是这样的。类似于:

// get the logged in seller and set it to $seller

$orders = Order::whereHas('orderItems.product', function ($query) {
    $query->where('seller_id', '=', $seller->id);
})->get();

// will get you orders that have products by this seller

从那时起,您可以过滤要显示的内容(排除不同卖家订单中的产品等)