Похоже, что вы не сохранили свой объект подключения (JFactory::getDbo()
). Я включу полный блок try-catch
, чтобы показать вам лучшие практики кодирования, которые сэкономят вам много времени в будущем, когда необходима отладка.
Если бы вы написали код для отлова ошибок, с которыми вам бы поступили:
Неустранимая ошибка: вызов функции-члена Quote () для null
Другими словами $db
не был определен и был null
. Это означает, что quote()
не было ресурса для работы.
Предлагаемый / непроверенный код:
$rentaldateconstant="OPTION_DATE";
$todaydate="01-09-2018";
$shoesize="OPTION_SIZE";
$db = JFactory::getDbo(); // you should call this once and use the variable when needed
try {
$query = $db->getQuery(true)
->select(
array(
"oi.orderitem_id",
"oi.orderitem_name",
"oi.product_id",
"oi.orderitem_quantity",
"oi.order_id",
"oia.orderitemattribute_name",
"oia.orderitemattribute_value"
)
)
->from("#__orders AS jo")
->leftJoin("#__orderitems AS oi ON oi.order_id=jo.order_id"
->leftJoin("#__orderitemattributes AS oia ON oia.orderitem_id=oi.orderitem_id"
->where("oia.orderitemattribute_name = " . $db->q($rentaldateconstant) . " AND oia.orderitemattribute_value = " . $db->q($todaydate))
->orwhere("oia.orderitemattribute_name = " . $db->q($shoesize));
echo $query->dump(); // to see what you've generated (never show to public)
$db->setQuery($query);
var_export($db->loadObjectList()); // to see what your resultset looks like as an array of objects
} catch (Exception $e) {
echo "Syntax Error " , $e->getMessage(); // never show exact error details to public
}
Я также хочу подвергнуть сомнению вашу логику предложения WHERE
. Я не знаю, чего требует логика вашего проекта, но это сгенерированное предложение из вашего запроса:
(oia.orderitemattribute_name = 'OPTION_DATE' AND
oia.orderitemattribute_value = '01 -09-2018 ') ИЛИ
(oia.orderitemattribute_name = 'OPTION_SIZE')
Однако я думаю, что ваша цель - склеить условия вместе с AND
.
->where(
array(
"oia.orderitemattribute_name = " . $db->q($rentaldateconstant),
"oia.orderitemattribute_value = " . $db->q($todaydate),
"oia.orderitemattribute_name = " . $db->q($shoesize)
)
)
это генерирует:
WHERE oia.orderitemattribute_name = 'OPTION_DATE'
AND oia.orderitemattribute_value = '01-09-2018'
AND oia.orderitemattribute_name = 'OPTION_SIZE'
Наконец, небольшой совет ... При сохранении значений даты в базе данных я рекомендую использовать столбец типа DATE и сохранить значения как YYYY-MM-DD
, чтобы в будущем вам было проще запрашивать / манипулировать данными .