CakePHP注册表:以数组形式返回出生日期

CakePHP注册表:以数组形式返回出生日期,cakephp,cakephp-2.0,Cakephp,Cakephp 2.0,我正在创建一个注册页面,唯一的问题是我输入的日期以数组形式返回,这在提交时破坏了我的SQL请求,我希望确保只提交日期,而不提交与时间相关的内容 我的数据库中的列标记为DoB,是用户提交表单后提交的日期。 守则: echo $this->Form->input('DoB', array( 'label' => 'Date of birth', 'type' => 'date', 'dateFormat' => 'YMD', 'minYe

我正在创建一个注册页面,唯一的问题是我输入的日期以数组形式返回,这在提交时破坏了我的SQL请求,我希望确保只提交日期,而不提交与时间相关的内容

我的数据库中的列标记为DoB,是用户提交表单后提交的日期。 守则:

echo $this->Form->input('DoB', array(
    'label' => 'Date of birth',
    'type' => 'date',
    'dateFormat' => 'YMD',
    'minYear' => date('Y') - 70,
    'maxYear' => date('Y') - 16,
));
我还没有找到并理解它,但我相信,如果我用同一个名称DoB进行一组年度、月份和日期输入,我可以达到同样的结果

编辑:我要传递到列中的值的格式如下: YYYY-MM-DD

演示: 在其他值中放置测试。将DoB字段保留为默认值('1998'、'5'、'7')。在提交表单时,一条flash消息告诉我,我的SQL中有一个致命错误,其中没有定义数组

SQL错误: (数据列:“用户名”、“密码”、“fName”、“lName”、“DoB”)
(从表单:“test”、“passwordtest”、“test”、“test”、“Array”输入)

您可以进行常规输入,将其保存到数据库中,如ex

    echo $this->Form->input('begin_time', array(
        'label' => 'Start',
        'value' => date('Y-m-d'). ' 09:00'
    ));
或者,您可以在AppModel中使用类似的函数

    /**
 * input field of type datetime returns array - this func change it 
 * @param array $dateTimeArray
 * @return string "YY-MM-DD HH-ii"
 */
public function timestamp($dateTimeArray) {

    return "{$dateTimeArray['year']}-{$dateTimeArray['month']}-{$dateTimeArray['day']} {$dateTimeArray['hour']}:{$dateTimeArray['min']}";
}

而不是在您的模型中的beforeSave使用它;)

别再担心了。原来我把它都放在了错误的目录中。

我建议您编写自己的帮助程序。请演示这个问题-问题中的代码将生成日期输入,保存时会自动处理。这不是一个明显的问题。从上次编辑来看,您误解了演示的含义。我的意思是复制步骤,包括足够的代码让其他人看到错误、准确的错误消息、调试时获得的信息等。结果证明问题是我把它放在了错误的目录中。因此,如果我使用第一个示例,它是否只是完成了一个dateTime对象,然后当为MySQL调用该对象时,助手类将删除该时间并将YYYY-MM-DD值放入数据库列?问题中的问题是实际问题的症状(例如,日期列的列类型错误)。如果您需要使用该功能,那么应用程序存在问题(这个答案有效地重新实现了这个问题),这只是在处理一个症状,IMO不是正确的解决方案。