2011-07-07 16 views
1

私は少し複雑な方法で結果を注文しようとしています。私は、結果を注文するために 'priority'という仮想フィールドを作成しました。ここに私のコードは次のとおりです。CakePHP MySQLの仮想フィールドの問題

public $virtualFields = array(
    'priority'=>'(Venue.featured * 5000) + (Venue.views * 2) + ((Venue.image_count > 0) * 500)', 
); 

私は残して、フィールドの一部を削除する場合さて、これは常に((Venue.image_count> 0)* 500)、すなわち500または0の値だけを返します。

public $virtualFields = array(
    'priority'=>'(Venue.featured * 5000) + (Venue.views * 2)', 
); 

期待される結果が示されます。また、フィールドに別のコンポーネントを追加したいのですが、これは同じ効果があります。コード:この場合

public $virtualFields = array(
    'priority'=>'(Venue.featured * 5000) + (Venue.views * 2) + ((CHAR_LENGTH(Venue.blurb) > 0) * 500)', 
); 

は、再び、フィールドは今まで500か0、すべてのフィールドのない完全な値です。

私は何が起こっているのか分かりません! image_countまたはCHAR_LENGTH(Venue.blurb)のどちらかを測定する仮想フィールドを作成すると問題なく動作しますが、フィールドの他の部分にこれらのいずれかを追加すると失敗します。

答えて

1

問題は、((Venue.image_count > 0) * 500)((CHAR_LENGTH(Venue.blurb) > 0) * 500)の両方の構文が正しくないことです。例えば

IF(Venue.image_count > 0, 500, 0) 
IF(CHAR_LENGTH(Venue.blurb) > 0, 500, 0); 

あなたはIFのステートメントを使用する必要があり

public $virtualFields = array(
    'priority' => '(Venue.featured * 5000) + (Venue.views * 2) + IF(Venue.image_count > 0, 500, 0)', 
); 
+0

おかげで、それはそれを修正しています。理由((Venue.image_count> 0)* 500)は0または500を単独で返します。 – Will

関連する問題