如何在cakephp中为日期字段使用mysql now()函数?

如何在cakephp中为日期字段使用mysql now()函数?,mysql,cakephp,date,Mysql,Cakephp,Date,我的cakephp项目中有以下代码: $this->data['MyObject']['expire_date'] = 'NOW()'; 而且 $this->MyObject->save($this->data); 但这不会将数据保存在数据库中。谷歌搜索后,我发现我现在可以这样使用了。但这似乎是错误的,正确的使用方法是什么 PS:MyMySQL字段的类型为“日期”。如果我这样使用,它会起作用: $this->data['MyObject']['expire_da

我的cakephp项目中有以下代码:

$this->data['MyObject']['expire_date'] = 'NOW()';
而且

$this->MyObject->save($this->data);
但这不会将数据保存在数据库中。谷歌搜索后,我发现我现在可以这样使用了。但这似乎是错误的,正确的使用方法是什么

PS:MyMySQL字段的类型为“日期”。如果我这样使用,它会起作用:

$this->data['MyObject']['expire_date'] = date( 'Y-m-d', mktime(0, 0, 0, date("m"), date("d")+30,   date("Y")));

你可以把它缩短为

$this->data['MyObject']['expire_date'] = date('Y-m-d H:i:s'); 
默认情况下,如果不向date传递第二个“timestamp”参数,date将采用当前时间


这种方法比调用DboSource::expression更可取,特别是当出于各种原因需要在控制器中而不是在模型中设置它时

对于cakephp 2.x用户:

$this->data['MyObject']['expire_date'] = strtotime('now');
$db = $this->MyObject->getDataSource(); 


$this->data['MyObject']['expire_date'] = $db->expression('NOW()');

对于CakePHP 3,如果有人在搜索,则需要使用SQL函数:

$query = $this->Example->query();
$query
    ->insert(['created','id'])
    ->values(array(
        'created' => $query->func()->now(),
        'id' => $id,
    ));
$result = $query->execute();
资料来源:


您是否考虑过将a设置为现在的值?我更新了问题。我的要求类似于DATENOW+间隔30天。但即使现在也不行!这就是PostgreSQL语法——看看selectDateNow+INTERVAL 30天;也将在MySQL中打印2011-06-02!:这很好,我在日期格式中有一些其他格式,但是如何使用MySQL函数呢?不建议这样做,因为您的代码依赖于数据库。如果这不是一个问题,您可以尝试这里描述的方法:这直接使用数据源,但要注意,这不会自动转义,因此您必须注意这一点。更好地使用date:一般来说,如果您希望SQL性能良好,就必须使用本机功能。这个要求非常简单,大多数数据库都支持它……好的,我将使用PHP格式。不过,我更喜欢将其留给MySQL,而不是PHP格式。不过,我还是想知道语法此代码假设PHP和MySQL使用相同的时区。使用DboSource::expression'NOW'是一个更安全的选择。它应该这样调用:$db=$this->MyObject->getDataSource$此->数据['MyObject']['expire_date']=$db->表达式'NOW';这将使您获得非静态方法DboSource::expression不应静态调用,假设$This来自严格模式下的不兼容上下文。无论谁找到了这个,请按照另一个答案中的建议使用$db->expression'NOW'
$query = $this->Example->query();
$query
    ->insert(['created','id'])
    ->values(array(
        'created' => $query->func()->now(),
        'id' => $id,
    ));
$result = $query->execute();