PHP 电子商务订单拆分给卖家 Laravel
PHP e-commerce order split to sellers Laravel
我目前正在使用 Laravel 5.3 构建一个小型网上商店,用户可以在其中注册并添加要销售的产品。然后另一个用户可以搜索产品,将它们放入购物车并购买。然后我将这个订单信息保存到数据库中(2 tables),order
(包含(订单的)id),user_id(谁买的)和总计支付金额),然后是 order_items
(包含 ID、相关订单 ID 和产品 ID)。
现在我想让卖家和买家都可以查看过去的订单。现在线索来了:向买家展示这个非常简单,因为我只需要检查 orders
table 中的用户 ID 并获取这些。但是seller就没那么容易了,我想了想,因为seller也应该看到"his"的订单,所以买家的订单,包含他的一个或多个产品,BUT:他应该只看到一部分订购他的产品,而不是购买者可能从其他人那里购买的产品。我想你知道我的意思吗?
有什么方法可以解决这个问题 "easily" 或者最佳实践是如何做到的?
基本上我可以创建两个 subtables,称为 sub_orders
和 sub_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
从那时起,您可以过滤要显示的内容(排除不同卖家订单中的产品等)
我目前正在使用 Laravel 5.3 构建一个小型网上商店,用户可以在其中注册并添加要销售的产品。然后另一个用户可以搜索产品,将它们放入购物车并购买。然后我将这个订单信息保存到数据库中(2 tables),order
(包含(订单的)id),user_id(谁买的)和总计支付金额),然后是 order_items
(包含 ID、相关订单 ID 和产品 ID)。
现在我想让卖家和买家都可以查看过去的订单。现在线索来了:向买家展示这个非常简单,因为我只需要检查 orders
table 中的用户 ID 并获取这些。但是seller就没那么容易了,我想了想,因为seller也应该看到"his"的订单,所以买家的订单,包含他的一个或多个产品,BUT:他应该只看到一部分订购他的产品,而不是购买者可能从其他人那里购买的产品。我想你知道我的意思吗?
有什么方法可以解决这个问题 "easily" 或者最佳实践是如何做到的?
基本上我可以创建两个 subtables,称为 sub_orders
和 sub_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
从那时起,您可以过滤要显示的内容(排除不同卖家订单中的产品等)