2012-04-04 12 views
0

私のデータベース(mysql)テーブルはTIMESTAMPカラムを使用し、クエリで返されるときはいつでも、それらを "UNIX_TIMESTAMP(columnname)"としてクエリします。zend frameworkが自動的にクエリを変更します

これを達成するために、zendフレームワークでどのように簡単にクエリを変更しますか?

例えば、現在のコードは次のとおりです。

select = $this->select(); 
$select->where('user_id = ?',$user_id); 
return $this->fetchAll($select); 

これは、最終的には次のようになります。

select * from tablename where user_id = 42; 

私は自動的にTIMESTAMP列を検索し、その結果得られるクエリを変更し、何かしたい:

select user_id,name,unix_timestamp(created) where user_id = 42; 

私はこれを達成するためにMySQLのビューを使用することができます知っているが、私はむしろthaを避けるだろうt。

ありがとうございました。

RR

答えて

2

あなたは$ SELECT - >から()オブジェクトを使用して選択で必要なフィールドを指定することができるはずです。

Zend_Db_Select

あなたはこのようなもので終わる必要があります。

$select = $this->select(); 

$select->from(
    array('t' => 'tablename'), 
    array('user_id', 'name', 'UNIX_TIMESTAMP(created)') 
); 

$select->where('user_id = ?',$user_id); 
return $this->fetchAll($select); 

あなたは正しくクエリを逃れるためにはZend_Db_Expr()メソッドを使用し、機能にParentheseのを持っていない表現を実行したい場合。

+0

ご回答いただきありがとうございます。はい、それは明らかです。私が探しているのは、すべての列を指定せずにこれを行う方法です。タイムスタンプを持つすべてのテーブルのPHPコードの列のリストを維持する必要のない汎用ソリューションが必要です。 – russellr

+0

ああ。申し訳ありませんが、私は誤解しました。 Doctrine2のようなものを見ることをお勧めします。注釈を使用してPHPクラスをMySQLにマップします。フィールドに注釈を付けた方法に応じて、正しい照会が生成されます。 Doctrine2 ORMは、TIMESTAMP MySQLタイプとPHP DateTimeの間のマッピングを自動的にサポートします。あなたが欲しいと思っているのは残念なことですが、一度それを掛ければ、人生は楽になります。 http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/basic-mapping.html –

関連する問題