【发布时间】:2016-11-12 08:36:21
【问题描述】:
我目前正在使用 Laravel 5.3 构建一个小型网上商店,用户可以在其中注册和添加要销售的产品。然后,另一个用户可以搜索产品,将它们放入购物车并购买。然后我将此订单信息保存到数据库中(作为 2 个表),order(包含(订单的)id,user_id(购买者)和总支付金额),然后是 order_items(包含id、相关的订单 id 和产品 id)。
现在我想让卖家和买家都可以查看过去的订单。现在出现了线索:向买家展示这个非常简单,因为我只需要检查 orderstable 中的用户 ID 并获取它们。但是卖家没那么容易,我想了想,因为卖家也应该看到“他的”订单,所以买家的订单,包含他的一种或多种产品,但是:他应该只看到订单的一部分他的产品,而不是买家可能从其他人那里购买的产品。我想你知道我的意思吗?
有什么方法可以“轻松”解决这个问题,或者是如何做到这一点的最佳实践?
基本上我可以创建两个子表,称为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]);
}
我现在如何只显示订单的相关产品以及这些相关产品的总和?
【问题讨论】:
-
您在
products表中没有seller_id或类似名称吗?如果你这样做(我猜你这样做),那应该很容易。您必须显示订单WHERE的产品(项目)seller_id是登录卖家的id。 -
@IlkerMutlu 是的,我在产品表中有这个 ID,但我需要得到订单,而不是产品......
-
我知道。过滤具有属于该特定卖家的产品的订单。请参阅this 以获取提示。 ;)
-
@IlkerMutlu 谢谢你的提示,但你能给我一个例子吗?我已经部分使用了这个(用于购物车与购物车项目的关系以及带有 order_items 的订单),但我仍然没有真正明白这个......我必须在我的模型中更改什么,然后我该如何调用这些功能?
标签: php laravel eloquent e-commerce laravel-5.3