我有一个不包含任何标题的模型。所有有趣的信息都在相关的模型中。
我已经阅读了有关虚拟字段的内容,您可以使用它来组合这样的字段:
public $virtualFields = array("full_name"=>"CONCAT(event_id, ' ' ,begin)");
public $displayField = 'full_name';
但是这给了我一个简单的id和日期。我需要将id作为其他模型的名称。
答案 0 :(得分:6)
这听起来像是Set::combine()
的工作。您的显示字段不应该引用不同的模型,因为它并不总是保证加入。因此,如果某个地方的调用没有引入数据,则会引发错误。
相反,使用Set::combine()
可以创建一个键值数组,无论你想要什么。虽然这不那么“神奇”,但它会减少错误的可能性。
对于UsersController示例,假设您拥有hasOne个人资料,并希望用户使用自动填充的下拉列表(即使用FormHelper)从其个人资料中显示用户的全名来选择用户。我们将使用Containable来引入个人资料数据。
class AppModel extends Model {
$actsAs = array(
'Containable'
);
}
然后在UsersController中:
function choose($id = null) {
// regular view code here
$users = $this->User->find('all', array(
'contain' => array(
'Profile'
)
));
// create a key-value that the FormHelper recognizes
$users = Set::combine($users , '{n}.User.id', '{n}.Profile.full_name');
}
您会注意到full_name
现在位于Profile模型上,因为它使用该模型中的字段。 combine方法创建一个类似
array(
1 => 'skerit',
2 => 'jeremy harris'
);
使用FormHelper创建下拉列表时将自动使用哪个
echo $this->Form->input('user_id');