Date CakePHP检查是否有预定日期

Date CakePHP检查是否有预定日期,date,cakephp,compare,cakephp-2.0,Date,Cakephp,Compare,Cakephp 2.0,一个星期前我就一直在努力解决这个问题,这让我快发疯了 我正在用CakePHP2.x做一个森林调查网站 有很多地方,每个地方都有不同的点。用户可以选择其中一个点并预订一天的调查,但每天一个点只能有一次调查 这些模型是:地点、点、用户、BookedSurvey 控制器包括:PlacesController、PointsController、UsersController、BookedSurveySController 表中省略了一些不必要的问题,如地点、点、用户、调查;在预订的调查中,您可以找到id

一个星期前我就一直在努力解决这个问题,这让我快发疯了

我正在用CakePHP2.x做一个森林调查网站

有很多地方,每个地方都有不同的点。用户可以选择其中一个点并预订一天的调查,但每天一个点只能有一次调查

这些模型是:地点、点、用户、BookedSurvey

控制器包括:PlacesController、PointsController、UsersController、BookedSurveySController

表中省略了一些不必要的问题,如地点、点、用户、调查;在预订的调查中,您可以找到id INT AUTO INCREMENT、survey_date time、point_id INT和user_id INT字段

视图包括:添加、编辑、删除和索引

查看点时,用户可以选择日期并按书本调查。这是视图的一部分:

<h2>Book a date:</h2>

<?php
echo $this->Form->create('BoostCake', array(
    'inputDefaults' => array(
        'div' => 'form-group',
        'label' => array(
            'class' => 'col col-md-1 control-label'
        ),
        'wrapInput' => 'col col-md-9',
        'class' => 'form-control'
    ),
    'class' => 'form-horizontal'
));
?>

<?php
echo $this->Form->create('Point');

echo $this->Form->input('BookedSurvey.survey_date', array(
    'type'=>'date',
    'label' => '',
    'dateFormat' => 'YMD',
    'minYear' => date('Y'),
    'minMonth' => date('M'),
    'minDay' => date('D'),
    'div' => 'col col-md-9',
    'style' => 'margin: 15px 5px 5px 0px'
));

echo $this->Form->hidden('User.id', array(
    'value' => $user_id)
);
?>

<div class="form-group">
    <?php
    echo $this->Form->submit('Book survey', array(
        'div' => 'col col-md-9',
        'class' => 'btn btn-success btn-lg',
        'style' => 'margin: 10px 5px 5px 10px'
    ));
    ?>
</div>
//压缩结束

$booked_condition = $this->Point->BookedSurvey->find('first', array(
        'conditions' => array(
            'DATE(BookedSurvey.survey_date)' => 'date()'
        )
    )
);

if ($booked_condition) {
    echo "Already booked"; 
}
老实说,我不知道什么是失败的,但请,如果有人能帮助

好的,解决了:

if ($this->request->is('post')) {
    $date = $this->request->data['BookedSurvey']['survey_date'];
    $formattedDate = CakeTime::format(
        "{$date['year']}-{$date['month']}-{$date['day']}",
        "%B %e, %Y"
    );
    print_r($formattedDate); //'Jul 23, 2014'

    $isBooked = $this->Point->BookedSurvey->find('count', array(
        // replace the date as you see fit, using Jul 23, 2014 as an example
        'conditions' => CakeTime::dayAsSql($formattedDate, 'survey_date')
    ));

    echo "status";
    print_r($isBooked);
    print_r(date('m'));
    print_r($this->request->data['BookedSurvey']['survey_date']);

    if($isBooked > 0) {
        echo "Already booked";
    }
}

正如所建议的,这是问题的解决方案:

if ($this->request->is('post')) {
$date = $this->request->data['BookedSurvey']['survey_date'];
$formattedDate = CakeTime::format(
    "{$date['year']}-{$date['month']}-{$date['day']}",
    "%B %e, %Y"
);
print_r($formattedDate); //'Jul 23, 2014'

$isBooked = $this->Point->BookedSurvey->find('count', array(
    // replace the date as you see fit, using Jul 23, 2014 as an example
    'conditions' => CakeTime::dayAsSql($formattedDate, 'survey_date')
));

echo "status";
print_r($isBooked);
print_r(date('m'));
print_r($this->request->data['BookedSurvey']['survey_date']);

if($isBooked > 0) {
    echo "Already booked";
}

}

您可能希望将您的解决方案添加为实际答案,并在以后接受它。另外,您还可以使用将日期数组转换为日期字符串。