5

Model.php

// Declare $datetime_limit
public datetime_limit;

Controller.php

// datetime_limit should be the actual datetime + 5 days
$criteria->select="DATE_ADD(NOW(), INTERVAL 5 DAY) AS datetime_limit";

エラーメッセージ:

Active record "Users" is trying to select an invalid column "DATE_ADD(NOW()". Note, the column must exist in the table or be an expression with alias.

編集1:

リレーションテーブル(多対多)を使用して、条件付きの検索をフィルタリングしたいと思います。したがって、datetime_limitリレーショナルで持つことはできませんevents.datetime。どうやってやるの?

$criteria->select=array("DATE_ADD(NOW(), INTERVAL 5 DAY) AS datetime_limit");
$criteria->with=array('events');
$criteria->having='datetime_limit!=`events`.`datetime`';
$models=Users::model()->findAll($criteria);
4

1 に答える 1

5

この例外はでスローされCActiveFinder::getColumnSelectます。

が文字列の場合CDbCriteria::$select、カンマ区切りの列の単純なリストとして扱われます。式は2つの異なる列として解釈されます。自分で配列に設定することでこれを回避できselectます-この場合、コンマ分割は行われません1

$criteria = new CDbCriteria();
$criteria->select = array("DATE_ADD(NOW(), INTERVAL 5 DAY) AS datetime_limit");
$models = Users::model()->findAll($criteria);

パブリックモデルプロパティまたはDBフィールドに対応しないエイリアスを作成すると、そのエイリアスは取得されますが、黙って無視されることに注意してください。何らかの理由で、Yiiはその例外をスローしません。


1ただし、この関数は引き続き式でaを検索し、.その後の部分を列識別子として解釈しようと.します。式では使用しないでください。問題はありません。

于 2012-12-27T19:15:41.253 に答える