我必须修改一个简单的项目,以不同的方式显示一些值。
我有一个MySQL数据库,其中存有预订。
我希望从预订中获取所有数据,选择房间和期间。
这是我的疑问:
function getReservation($idroom,$date){
$db=JFactory::getDbo();
$query=$db->getQuery(true);
$datecheck=$date->format('%Y-%m-%d');
$query
->select($db->quoteName(array('idroom','status','idguests','nguests','value_paid','value_pending','value_full','valid_from','valid_to','today','extra_ids','nchilds')))
->from($db->quoteName('#__bookitbooking'))
->where($db->quoteName('idroom')."=".$idroom)
->and ( $db->quoteValue($datecheck) . "BETWEEN" . $db->quoteName('valid_from') . "AND" . $db->quoteName('valid_to'));
$db->setQuery($query);
$res = $db->loadObjectList();
return $res;
}
但是and
子句似乎没有效果,事实上当我从查询中获得保留的计数时,我得到了与$idroom
值匹配的所有内容。
使用该功能,我想知道对于特定日期是否存在预约,如果存在,我想获得所有参数。
我的错误在哪儿?
显然,我最多只能获得一个预订对象。
答案 0 :(得分:0)
您的语法有误。在使用核心Joomla DBO类时,在第二个where子句中假设“和”,其中检查日期。将第二个where子句行更改为:
->where(INSERT DATE QUERY HERE);
*编辑*
我注意到的另外几件事是日期格式化以及用于将值包装在表名和$ datecheck变量的引号中的方法。不是说你正在使用的日期格式不应该或不会起作用,但传统上我总是使用MySQL语法格式化我的日期。试试这个,它考虑MySQL日期格式并使用用于包装表名的DBO方法:
function getReservation($idroom,$date){
$db=JFactory::getDbo();
$query=$db->getQuery(true);
$datecheck= date('Y-m-d H:i:s');
$query
->select($db-quoteName(array('idroom','status','idguests','nguests','value_paid','value_pending','value_full','valid_from','valid_to','today','extra_ids','nchilds')))
->from($db->quote('#__bookitbooking'))
->where($db->quoteName('idroom')."=".$idroom)
->where( $db->quoteName($datecheck) . "BETWEEN" . $db->quoteName('valid_from') . "AND" . $db->quoteName('valid_to'));
$db->setQuery($query);
$res = $db->loadObjectList();
return $res;
}