【问题标题】:Cakephp 3: belongsToMany contain or matching condition?Cakephp 3:belongsToMany 包含或匹配条件?
【发布时间】:2016-05-23 09:49:41
【问题描述】:

我的数据库片段看起来像 database part

类别使用树行为。

如何获取当前类别的制造商(生产商)产品? 我尝试了包含和匹配,但我收到了重复的数据或没有相关产品的生产者名称。

编辑:

$query = $this->Producers->find()->matching('Products.Categories',
    function ($q) {
        return $q->where(['Categories.id' => 18]); 
    }
);

结果:

Producent: Canon
-------------------------------------------
| ID | Name        | Barcode              |
-------------------------------------------
| 1  | EOS 1000D   |                      |
-------------------------------------------
| 18 | Camera      |                      |
-------------------------------------------
| 23 | 18          |                      |
-------------------------------------------

第一行 (id = 1) 这是我需要的。 现在我必须从结果中删除: 第二行 (id = 18) 这是表类别中的类别 id, 第三行 (id = 23) - 来自 Products_Categories 表。

【问题讨论】:

  • 到目前为止你尝试了什么?
  • 我必须在当前类别中按生产商显示产品,即:类别:相机生产商佳能:-EOS 1000D - Powershot 生产商:尼康-产品 D5 - 产品:D700
  • @arilia 要求的是一些失败尝试的示例代码(理想情况下带有附加信息,例如是否可能存在尚未关联任何产品的生产商)。通常匹配是要走的路。
  • 我的错,我理解不同——比如太深的联想。好的,这是我的实际结果,现在我更接近了。 ` $query = $this->Producers->find()->matching( 'Products.Categories', function ($q) { return $q->where(['Categories.id' => 18]); } ` 当然会返回 category.id = 18 的所有内容,例如 Category 和 Products_Categories 中的数据。
  • 将代码添加到您的问题帖子中,而不是此处。

标签: cakephp-3.x


【解决方案1】:

完成。有工作查询:

$query = $this->Producers->find()
        ->select(['Producers.id','Producers.name', 'Products.id',   'Products.name'])
        ->matching(
            'Products.Categories', function ($q) use ($categoryId){
                return $q->where(['Categories.id' => $categoryId]);
            }
        );

【讨论】:

    猜你喜欢
    • 2015-06-26
    • 1970-01-01
    • 2013-12-18
    • 1970-01-01
    • 1970-01-01
    • 2015-04-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多