0

私は関連付けを使用して、CakePHP でモデルをリンクしています。

リレーションシップを使用しPlayerてモデルにリンクされているモデルがあります。したがって、基本的に 1 人のプレイヤーは多くの統計を持つことができます。Statistic$hasMany

これらの関係をセットアップした後、とモデルcake bakeの両方のコントローラーとビューを生成するために使用します。PlayerStatistic

すべてが正常に機能し、期待どおりに機能しますが、追加テンプレートを使用して統計を追加すると、player_idが関連付けとして使用されます。

私の質問は、モデルを関連付けとして使用するようにモデルを設定する方法ですがplayer_id、追加テンプレートのドロップダウン メニューとしてプレーヤーの姓名などを使用する方法です。

現在、新しい統計を追加しようとすると、すべてのプレーヤー 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
4

1 に答える 1

2

Cakeは、リストのデフォルトの列を選択するときにモデルのdisplayField属性を使用します。モデルに何も定義されていない場合は、nameまたはを検索しtitleます。したがって、モデルでは次のものを使用できます。

public $displayField = 'first_name';

これにより、リストにプレーヤーの名が表示されます。

表示フィールドを2つのフィールドの連結にする場合は、次のようにモデルで仮想フィールドを使用できます。

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 に答える