我在CakePHP中一起使用Associations to Link Models。
我有Player
模型,该模型使用Statistic
关系链接到$hasMany
模型。所以基本上一个玩家可以有很多统计数据。
在我设置这些关系后,我使用cake bake
生成Player
和Statistic
模型的控制器和视图。
一切正常并按预期工作,但当我使用添加模板添加统计信息时,player_id
用作关联。
我的问题是如何设置模型以使用player_id
作为关联,但使用播放器的名字和姓氏作为添加模板中的下拉菜单。
目前,如果我要添加一个新的统计信息,我会得到一个名为“播放器”的下拉框,其中列出了所有玩家ID,但我想要的是播放器的first_name和last_name在该下拉框中的身份证明。我意识到我可以修改控制器或模板来实现这一目标,但我想知道我是否可以在设置模型时执行此操作,以便cake bake
可以处理它。
玩家模型:
<?php
class Player extends AppModel {
public $name = 'Player';
public $belongsTo = array(
'School' => array(
'className' => 'School',
'foreignKey' => 'school_id'
)
);
public $hasMany = 'Statistic';
}
统计模型:
<?php
class Statistic extends AppModel {
public $name = 'Statistic';
public $belongsTo = array(
'Player' => array(
'className' => 'Player',
'foreignKey' => 'player_id'
)
);
}
球员表
`id|school_id|first_name|last_name|number|position
答案 0 :(得分:2)
Cake在选择列表的默认列时使用模型的displayField属性。如果没有为模型定义,则会查找name
或title
。所以在你的模型中你可以使用:
public $displayField = 'first_name';
这将在列表中显示玩家的名字。
如果您希望显示字段是两个字段的串联,您可以在模型中使用virtual field,如下所示:
public $virtualFields = array(
'name' => "TRIM(CONCAT(Player.first_name, ' ', Player.last_name))"
);
注意以上适用于Mysql。对于另一种数据库,您需要调整语法。例如,对于Sqlite,它将是:
TRIM(Player.first_name || ' ' || Player.last_name)
然后添加你的模型:
public $displayField = 'name';