【问题标题】:PHP e-commerce order split to sellers LaravelPHP 电商订单拆分给卖家 Laravel
【发布时间】:2016-11-12 08:36:21
【问题描述】:

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

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

有什么方法可以“轻松”解决这个问题,或者是如何做到这一点的最佳实践? 基本上我可以创建两个子表,称为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]);
    }

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

【问题讨论】:

  • 您在products 表中没有seller_id 或类似名称吗?如果你这样做(我猜你这样做),那应该很容易。您必须显示订单WHERE 的产品(项目)seller_id 是登录卖家的id
  • @IlkerMutlu 是的,我在产品表中有这个 ID,但我需要得到订单,而不是产品......
  • 我知道。过滤具有属于该特定卖家的产品的订单。请参阅this 以获取提示。 ;)
  • @IlkerMutlu 谢谢你的提示,但你能给我一个例子吗?我已经部分使用了这个(用于购物车与购物车项目的关系以及带有 order_items 的订单),但我仍然没有真正明白这个......我必须在我的模型中更改什么,然后我该如何调用这些功能?

标签: php laravel eloquent e-commerce laravel-5.3


【解决方案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

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

【讨论】:

  • 我收到Call to undefined method Illuminate\Database\Query\Builder::Product(),我需要在这里写些什么?数据库表名?型号名称?
  • 我是否也需要更改模型中的某些内容?像Order-&gt;hasMany('products') 或类似的东西?
  • 是的,答案假设您已经定义了关系。见Laravel Defining Relationships
  • 有没有办法定义多个关系?因为我已经有return $this-&gt;hasMany('App\OrderItem');,我怎么还能在里面添加产品?
  • 您可以定义任意多个。你要不要发布一些关于我们正在讨论的模型的代码?
猜你喜欢
  • 1970-01-01
  • 2019-10-28
  • 1970-01-01
  • 1970-01-01
  • 2016-08-21
  • 1970-01-01
  • 1970-01-01
  • 2015-08-21
  • 1970-01-01
相关资源
最近更新 更多