【问题标题】:Problem filtering orders from user who owns the product - Cakephp 3过滤来自拥有产品的用户的订单问题 - Cakephp 3
【发布时间】:2020-09-04 00:03:18
【问题描述】:

朋友们,我有一个订单表,我在其中记录了用户的订单。该表有以下字段:

id、数量、product_id、user_id

通过这种方式,用户可以购买他的产品并查阅他的历史记录。问题是我想在注册产品的公司方面这样做。我只想为拥有该产品的用户按 product_id 过滤。

我的 OrdersTable.php

.
.
    $this->belongsTo('Products', [
            'foreignKey' => 'product_id',
            'joinType' => 'INNER',
        ]);
    $this->belongsTo('Users', [
            'foreignKey' => 'user_id',
            'joinType' => 'INNER',
        ]);
    }

我的方法如下。请注意,我以手动输入 id 为例。这个想法是从登录的用户那里获取此信息。如果有人可以查看或评论,我将不胜感激。这个细节不知道怎么解决!

    public function index()
    {
        $this->paginate = ['contain' => ['Users','Products']];
        $query = $this->Orders->find('all')->where(['Orders.product_id' => 76]);

        $this->set('orders', $this->paginate($query));
        $this->set('_serialize', ['order']);
    }

【问题讨论】:

  • 您使用什么方法进行身份验证?旧组件还是新插件?查看有关如何获取登录用户的文档,并将其添加到您的 where 子句中。
  • 我这样做:$this->getRequest()->getSession()->read('Auth.User.id')。但是,我需要按 product_id 过滤以显示已选择且属于注册用户的产品。我输入的代码的结果返回用户ID。
  • 您对您正在尝试做的事情的描述可以用许多不同的方式来解释,很难弄清楚您到底是什么意思/您遇到的问题到底是什么。如果您可以提供一个您希望最终查询看起来像什么的示例,或者您的数据库中的内容以及您想要检索的数据集的示例,这可能会有所帮助。
  • 我的订单表有以下字段:id、数量、product_id、user_id。当客户购买产品时,他可以检索历史记录,因为他的 id 被保存了。我正在尝试检索所选产品的信息并将其显示给注册它的用户(公司)。
  • 如果您知道最终的 SQL 查询应该是什么样子,这也将有助于更好地理解您在使用查询构建器时可能遇到的问题。

标签: php cakephp cakephp-3.0


【解决方案1】:

感谢大家的关注。我是这样决定的:

        $query = $this->Orders->find();
        $query->contain('Products', function ($q) {
            return $q->where(['Products.user_id' => $this->getRequest()->getSession()->read('Auth.User.id')]);
        });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-19
    • 1970-01-01
    • 1970-01-01
    • 2016-02-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多