Having в msproducts
Добрый день. Не получается с помощью msproducts и msproductremains вывести товары которые остались в одном экземпляре. На странице дополнения есть пример вывода товаров, которые есть в наличии:
Корректный код, на мой взгляд, должен выглядеть вот так:
Ниже лог запроса без having
[[!msProducts?
&leftJoin=`{"Remains":{"class":"msprRemains","on":"msProduct.id = Remains.product_id AND Remains.remains > 0"}}`
&groupby=`msProduct.id`
&select=`{"msProduct":"*","Remains":"SUM(Remains.remains) as remains"}`
&where=`{"Remains.remains:>":"0"}`
]]
Анализ лога итогового запроса показал, что вывести аналогичным образом продукты с суммарным остатком = 1 не получится и нужно использовать having.Корректный код, на мой взгляд, должен выглядеть вот так:
[[!msProducts?
&parents=`10`
&limit=`3`
&leftJoin=`{"Remains":{"class":"msprRemains","on":"msProduct.id = Remains.product_id AND Remains.remains > 0"}}`
&groupby=`msProduct.id`
&select=`{"msProduct":"*","Remains":"SUM(Remains.remains) as rem"}`
&having=`Remains.rem=1`
&tpl=`productsRow`
]]
Но он выдает 500-ую ошибку:[Sat Apr 22 14:48:24.937388 2017] [:error] [pid 37280] [client 37.235.216.219:57754] PHP Fatal error: Uncaught TypeError: Argument 1 passed to pdoFetch::replaceTVCondition() must be of the type array, string given, called in /path/core/components/pdotools/model/pdotools/pdofetch.class.php on line 233 and defined in /path/core/components/pdotools/model/pdotools/pdofetch.class.php:945\nStack trace:\n#0 /path/core/components/pdotools/model/pdotools/pdofetch.class.php(233): pdoFetch->replaceTVCondition('Remains.rem=1')\n#1 /path/core/components/pdotools/model/pdotools/pdofetch.class.php(85): pdoFetch->addWhere()\n#2 /path/core/cache/includes/elements/modsnippet/10.include.cache.php(167): pdoFetch->run()\n#3 /path/core/model/modx/modscript.class.php(70): include('/home/c/co82734...')\n#4 /path/core/model/modx/modparser.class.php(521): modScript->process()\n#5 /path/core/components/pdotools/model/pdotools/pdop in /path/core/components/pdotools/model/pdotools/pdofetch.class.php on line 945Срок поддержки msproductremains закончился. Подскажите, в чём проблема и как добиться желаемого?
Ниже лог запроса без having
SELECT SQL_CALC_FOUND_ROWS `msProduct`.`id`, `msProduct`.`type`, `msProduct`.`contentType`, `msProduct`.`pagetitle`, `msProduct`.`longtitle`, `msProduct`.`description`, `msProduct`.`alias`, `msProduct`.`link_attributes`, `msProduct`.`published`, `msProduct`.`pub_date`, `msProduct`.`unpub_date`, `msProduct`.`parent`, `msProduct`.`isfolder`, `msProduct`.`introtext`, `msProduct`.`content`, `msProduct`.`richtext`, `msProduct`.`template`, `msProduct`.`menuindex`, `msProduct`.`searchable`, `msProduct`.`cacheable`, `msProduct`.`createdby`, `msProduct`.`createdon`, `msProduct`.`editedby`, `msProduct`.`editedon`, `msProduct`.`deleted`, `msProduct`.`deletedon`, `msProduct`.`deletedby`, `msProduct`.`publishedon`, `msProduct`.`publishedby`, `msProduct`.`menutitle`, `msProduct`.`donthit`, `msProduct`.`privateweb`, `msProduct`.`privatemgr`, `msProduct`.`content_dispo`, `msProduct`.`hidemenu`, `msProduct`.`class_key`, `msProduct`.`context_key`, `msProduct`.`content_type`, `msProduct`.`uri`, `msProduct`.`uri_override`, `msProduct`.`hide_children_in_tree`, `msProduct`.`show_in_tree`, `msProduct`.`properties`, `Data`.`article`, `Data`.`price`, `Data`.`old_price`, `Data`.`weight`, `Data`.`image`, `Data`.`thumb`, `Data`.`vendor`, `Data`.`made_in`, `Data`.`new`, `Data`.`popular`, `Data`.`favorite`, `Data`.`tags`, `Data`.`color`, `Data`.`size`, `Data`.`source`, `Data`.`material`, `Vendor`.`name` AS `vendor.name`, `Vendor`.`resource` AS `vendor.resource`, `Vendor`.`country` AS `vendor.country`, `Vendor`.`logo` AS `vendor.logo`, `Vendor`.`address` AS `vendor.address`, `Vendor`.`phone` AS `vendor.phone`, `Vendor`.`fax` AS `vendor.fax`, `Vendor`.`email` AS `vendor.email`, `Vendor`.`description` AS `vendor.description`, `Vendor`.`properties` AS `vendor.properties`, SUM(Remains.remains) as rem
FROM `modx_site_content` AS `msProduct`
LEFT JOIN `modx_ms2_products` `Data` ON `msProduct`.`id` = `Data`.`id`
LEFT JOIN `modx_ms2_vendors` `Vendor` ON Data.vendor=Vendor.id
LEFT JOIN `modx_ms2_product_remains` `Remains` ON msProduct.id = Remains.product_id AND Remains.remains > 0
WHERE ( `msProduct`.`class_key` = 'msProduct' AND `msProduct`.`parent` IN (10,23,24,38,30,15,75,63,64,65,66,67,68,69,70,71,72,79,80,81,82,83,84,85,86,91,92,93,54,55,57,56,87,88,89,90,22,48,49,46,47,20,59,61,58,34,39,43,45,50,53,21,25,26,33,35,36,40,51,37,41,42,76,77,78) AND `msProduct`.`published` = 1 AND `msProduct`.`deleted` = 0 )
GROUP BY msProduct.id
ORDER BY msProduct.id ASC LIMIT 3