我从一周前就开始挣扎,这让我发疯了。
我正在使用CakePHP 2.x建立一个在森林中进行调查的网站。
有很多地方,每个地方都有不同的观点。用户可以选择其中一个点并预订一天进行调查,但每天只能进行一次调查。
模型为:Place
,Point
,User
,BookedSurvey
控制器为:PlacesController
,PointsController
,UsersController
,BookedSurveysControllers
表格(省略一些不是此问题的必要条件)是places
,points
,users
,booked_surveys
;在booked_surveys
内,您可以找到字段id (INT AUTO INCREMENT)
,survey_date (datetime)
,point_id (int)
和user_id (int)
。
视图为:add
,edit
,remove
,index
每个
查看点时,用户可以选择日期并按"预订调查"。这是观点的一部分:
<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";
}
}
答案 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";
}
}