1

我想知道如何使用CActiveRecordYii 实现这一点:

SELECT name, surname, UTC_TIMESTAMP(last_seen) FROM users WHERE id = '12345'

我已经使用这种方法编写了大部分代码:$model->findAll(...),但是我无法将我最喜欢的 MySQL 时间戳函数合并到查询中。

我需要这个才能date_default_timezone_set()在 PHP 中设置时区。

我的时间戳TIMESTAMP以 mysql 表中的格式存储。

编辑

我不想将时区从 PHP 传递给 MySQL。CURRENT_TIMESTAMP我使用默认值存储我的时间戳。我想使用的唯一时间date_default_timezone_set()是当我想在用户的时区中显示此日期时。

抱歉,如果我不够清楚,感谢您的输入:-)

4

1 回答 1

1

在您最近发表评论之后,是的,有一种方法可以传递日期时间函数。如果您查看 can take 2 个参数的文档findAll();,一个用于条件或条件,第二个用于将参数绑定到生成的 sql。

我们可以使用第一个参数来传递一个条件并使用CDbCriteria 的select属性,它

指sql语句的select子句

因此我们可以这样做:

$dbCriteria=new CDbCriteria;
$dbCriteria->select='name, surname, UTC_TIMESTAMP() as some_alias'; // we need the alias so that the timestamp is easily accessible
// you can also pass * if you need to access all the values of the table, alongwith the timestamp, like '*, UTC_TIMESTAMP() as some_alias'
$model->findAll($dbCriteria);

但是当然要使用 some_alias 你需要在你的模型中声明它:

public $some_alias; // this will be automatically be populated by the alias, when you query the db, in findAll
于 2012-07-22T13:44:24.633 回答