我正试图以稍微复杂的方式订购我的结果。我创建了一个名为'priority'的虚拟域来按顺序排序结果。这是我的代码:
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)的虚拟字段,它可以正常工作,但是将其中任何一个添加到字段的其他部分会使其失败。
答案 0 :(得分:1)
问题是((Venue.image_count > 0) * 500)
和((CHAR_LENGTH(Venue.blurb) > 0) * 500)
的语法都不正确。
您应该使用IF
声明:
IF(Venue.image_count > 0, 500, 0)
IF(CHAR_LENGTH(Venue.blurb) > 0, 500, 0);
例如:
public $virtualFields = array(
'priority' => '(Venue.featured * 5000) + (Venue.views * 2) + IF(Venue.image_count > 0, 500, 0)',
);