我目前正在使用Laravel 5.3构建一个小型网上商店,用户可以注册并添加要销售的产品。然后,另一个用户可以搜索产品,将它们放入购物车并购买。然后我将这个订单信息保存到db(作为2个表),order
(包含id(订单),user_id(谁买了它)和总付费金额)然后theres {{1 (包含id,相关订单ID和产品ID)。
现在我想让卖家以及买家有机会查看过去的订单。现在有了线索:向买家展示这一点很简单,因为我只需要检查order_items
表中的用户ID并获取它们。但是在我想到之后,卖家并不那么容易,因为卖家也应该看到"他的"订单,所以来自买家的订单,包含他的一个或多个产品,但是:他应该只看到订单的一部分与他的产品,而不是买家可以从其他人那里购买的产品。我想你知道我的意思吗?
有没有办法解决这个问题"轻松"或者最佳实践如何做到这一点?
基本上我可以创建两个子表,称为orders
和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
我现在如何仅显示订单的相关产品以及相关产品的总和?
答案 0 :(得分:1)
不确定你如何命名你的模型,但这是个主意。类似的东西:
// 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
从那时起,您可以过滤您想要展示的内容(不同卖家的订单中排除产品等)。