0

我在 CakePHP 中使用关联将模型链接在一起。

我有一个使用关系Player链接到模型的模型。所以基本上一个球员可以有很多统计数据。Statistic$hasMany

在我建立了这些关系之后,我cake bake会为PlayerStatistic模型生成控制器和视图。

一切正常并且按预期工作,但是当我使用添加模板添加统计信息时,它player_id被用作关联。

我的问题是如何设置模型以将其player_id用作关联,但使用玩家的名字和姓氏之类的东西作为添加模板中的下拉菜单。

目前,如果我要添加一个新的统计信息,我会得到一个名为“Player”的下拉框,其中列出了所有玩家 ID,但我想要的是玩家的名字和姓氏在该下拉框中而不是 ID . 我意识到我可以修改控制器或模板来完成此操作,但我想知道我是否可以在设置模型时执行此操作以便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
4

1 回答 1

2

在为列表选择默认列时,Cake 使用模型的displayField属性。如果没有为模型定义,它将查找nameor title。因此,在您的模型中,您可以使用:

public $displayField = 'first_name';

这将在列表中显示玩家的名字。

如果您希望显示字段是两个字段的串联,则可以在模型中使用虚拟字段,如下所示:

public $virtualFields = array(
    'name' => "TRIM(CONCAT(Player.first_name, ' ', Player.last_name))"
);

请注意以上适用于 Mysql。对于另一种数据库,您需要调整语法。例如,对于 Sqlite,它将是:

 TRIM(Player.first_name || ' ' || Player.last_name)

然后添加您的模型:

public $displayField = 'name';
于 2012-07-26T21:38:56.990 回答