Ошибка при запросе с указанием доп.поля
Подскажите пожалуйста, как правильно сделать запрос и найти все товары с указанием своего дополнительного поля.
Ругается:
$products= $modx->getCollection('msProduct', array(
'createdby' => $idUser,
'parent:IN' => $category,
'block' => 0
));
где block поле созданное мной.Ругается:
**public_html/core/xpdo/om/xpdoobject.class.php : 240)
Error 42S22 executing statement:
Array
(
[0] => 42S22
[1] => 1054
[2] => Unknown column 'msProduct.block' in 'where clause'
)
При этом что $product->get('block');
получает запись. Комментарии: 4
Не уж то только через PDO?
$sql = $modx->prepare(
'SELECT id FROM modx_ms2_products WHERE `block` = 0 AND id IN
(SELECT id from modx_site_content
WHERE `createdby` = '.$idUser.'
AND `parent` IN ('.implode($category,',').')
)
');
Вам нужно в where условие прописать, вроде как вот так, но там уже в зависимости от того что за поле block (tv или поле для минишопа)
'where' => '{ "Data.block":"0" }'
или'where' => '{ "block":"0" }'
Это при условии что у вас в базе у поля значение «0»
Если where прописывать в сниппет msProducts, то он фильтрует (это пригодится, спасибо).
Но мне необходимо получить их через getCollection, хотя бы для того, чтобы посчитать их количество.
Но мне необходимо получить их через getCollection, хотя бы для того, чтобы посчитать их количество.
Посмотрев в файле .map можно было увидеть, что msProduct связан с msProductData через Data
Получилось следующим образом:
Получилось следующим образом:
$idUser = 7;
$categoryId = 12;
$category = $modx->getChildIds($categoryId, 10, array('context' => 'web'));
$query = $modx->newQuery('msProduct');
$query->leftJoin('msProductData', 'Data');
$query -> where(array(
'msProduct.createdby' => $idUser,
'msProduct.parent:IN' => $category,
'Data.block' => 0
));
$products= $modx->getCollection('msProduct', $query);
echo count($products);
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.