CakePHP检查是否有预订日期

时间:2014-07-23 01:19:53

标签: date cakephp compare cakephp-2.0

我从一周前就开始挣扎,这让我发疯了。

我正在使用CakePHP 2.x建立一个在森林中进行调查的网站。

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

模型为:PlacePointUserBookedSurvey

控制器为:PlacesControllerPointsControllerUsersControllerBookedSurveysControllers

表格(省略一些不是此问题的必要条件)是placespointsusersbooked_surveys;在booked_surveys内,您可以找到字段id (INT AUTO INCREMENT)survey_date (datetime)point_id (int)user_id (int)

视图为:addeditremoveindex每个

查看点时,用户可以选择日期并按"预订调查"。这是观点的一部分:

<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_survey中搜索该点是否有同一日期的任何调查。由于每个字段每天只应进行一次调查,如果同一天在同一点进行任何其他调查,则会显示错误。

这就是问题:它从未发现任何巧合。我用谷歌搜索,尝试了所有不同的选项,但仍然无法正常工作。这是我在PointsController中的搜索(简化,目前我试图在同一天搜索任何调查):

//开始混淆

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

if ($booked_condition) {
    echo "Already booked"; 
}

// comprobation结束

说实话,我不知道什么是失败的,但请,如果有人可以提供帮助......

好的,解决了:

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";
    }
}

1 个答案:

答案 0 :(得分:0)

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

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";
}

}