cakePHP 3-如何在SELECT部分 中获取子查询

问题描述 投票:0回答:1

有人对如何直接依赖CakePHP 3中主查询字段中的值的SELECT中的子查询有任何建议或经验吗? 查询如下所示。

我正在尝试获取每个仓库中每个项目的OnHand值。我的物品和仓库清​​单将是动态的。一些用户可能会看到多达12个仓库和2K-3K物品。通过SQL查询,我可以获取一个包含每个项目包含3-12个元素的项目数组。一个很好的数组,可以轻松地循环显示。

我的查询对每个SQL有效。我收到约200个结果。我确定我已经以非蛋糕方式构建了子查询,但是我无法弄清楚如何在查询的选择部分内实现子查询。

我现在了解的问题不是直接与分页有关,而是与ResultSet(duh,错误消息从一开始就说)。我尝试了没有分页的查询。 稍后我会担心分页。只是

$query = $this->Inventory->Products->find('all', ['fields' => $select, 'conditions' => $conditions, 'order' => [$sort => $direction]]);

$ query-> all(),$ query-> toList()和$ query-> first()都产生相同的ResultSet错误。

CakePHP文档中的示例以及大多数(如果不是全部,我肯定我已经错过了某些东西,>>)示例)在堆栈的其他示例中显示查询的FROM或WHERE部分中的子查询或在表之间联接。

OR

我不正确地处理这个吗?我可以在不同的查询中获得相同的结果吗?

非常感谢所有帮助。谢谢。

[同样,感谢@ndm编辑我的帖子,以使其对读者更友好。你要努力:)

环境:

  • CakePHP 3.8.6
  • PHP 7.3.7
  • MSSQL 2014
  • 控制器代码=>索引方法

debug($select);产量

[(int) 0 => 'Products.ItemCode',
(int) 1 => 'Products.ItemName',
''03'' => '(SELECT OnHand FROM OITW WHERE ItemCode = Products.ItemCode AND WhsCode = '03')',
''04'' => '(SELECT OnHand FROM OITW WHERE ItemCode = Products.ItemCode AND WhsCode = '04')',
''05'' => '(SELECT OnHand FROM OITW WHERE ItemCode = Products.ItemCode AND WhsCode = '05')',
''06'' => '(SELECT OnHand FROM OITW WHERE ItemCode = Products.ItemCode AND WhsCode = '06')',
''07'' => '(SELECT OnHand FROM OITW WHERE ItemCode = Products.ItemCode AND WhsCode = '07')',
''08'' => '(SELECT OnHand FROM OITW WHERE ItemCode = Products.ItemCode AND WhsCode = '08')',
''09'' => '(SELECT OnHand FROM OITW WHERE ItemCode = Products.ItemCode AND WhsCode = '09')',
''14'' => '(SELECT OnHand FROM OITW WHERE ItemCode = Products.ItemCode AND WhsCode = '14')',
''15'' => '(SELECT OnHand FROM OITW WHERE ItemCode = Products.ItemCode AND WhsCode = '15')']

debug($conditions);产量

['Products.validFor' => 'Y',
'Products.ItemCode LIKE ' => 'TCP%']
$this->paginate = [
    'fields' => $select,
    'conditions' => $conditions,
    'order' => [$sort => $direction]
]; 
$query = $this->Inventory->Products->find('all', $this->paginate);
debug($query);

收益率

SELECT
    Products.ItemCode AS [Products__ItemCode],
    Products.ItemName AS [Products__ItemName],
    (SELECT OnHand FROM OITW WHERE ItemCode = Products.ItemCode AND WhsCode = '03') AS '03',
    (SELECT OnHand FROM OITW WHERE ItemCode = Products.ItemCode AND WhsCode = '04') AS '04', 
    (SELECT OnHand FROM OITW WHERE ItemCode = Products.ItemCode AND WhsCode = '05') AS '05', 
    (SELECT OnHand FROM OITW WHERE ItemCode = Products.ItemCode AND WhsCode = '06') AS '06', 
    (SELECT OnHand FROM OITW WHERE ItemCode = Products.ItemCode AND WhsCode = '07') AS '07', 
    (SELECT OnHand FROM OITW WHERE ItemCode = Products.ItemCode AND WhsCode = '08') AS '08', 
    (SELECT OnHand FROM OITW WHERE ItemCode = Products.ItemCode AND WhsCode = '09') AS '09', 
    (SELECT OnHand FROM OITW WHERE ItemCode = Products.ItemCode AND WhsCode = '14') AS '14', 
    (SELECT OnHand FROM OITW WHERE ItemCode = Products.ItemCode AND WhsCode = '15') AS '15' 
FROM
    OITM Products
WHERE
    (Products.validFor = :c0 AND Products.ItemCode like :c1) 
ORDER BY
    Products.ItemName ASC
$inventory = $this->paginate($query, ['limit' => 50]);
debug($inventory);

收益率

传递给Cake \ ORM \ Entity :: __ construct()的参数1必须为数组类型,给定布尔值,在C:\ inetpub \ wwwroot \ vendor \ cakephp \ cakephp \ src \ ORM \ ResultSet.php中调用602

有人对如何直接依赖CakePHP 3中主查询字段中的值的SELECT中的子查询有任何建议或经验吗?查询是...

sql-server cakephp pagination subquery cakephp-3.0
1个回答
0
投票

我试图通过]来对子查询进行蛋糕>

$select[] = $this->Inventory->find()->select([$key => 'OnHand'])->where(['WhsCode' => $key, 'ItemCode' => 'Products.ItemCode']);

© www.soinside.com 2019 - 2024. All rights reserved.