4

Cakephp noobによる簡単な質問:

プレーヤーとチームの2つのモデルがあります。

チームにはid(int)とcool_name(varchar)があります。

プレーヤーには、id(int)、cool_name(varchar)、およびチームテーブルの参照team_id(int)があります。

英語のテーブルがないため、名前の代わりにCool_nameを使用します。そのため、フィールド「name」を使用できません。

つまり、チームには多くのプレーヤーがいて、プレーヤーはチームに属しています。

私のプレーヤーモデル:

class Player extends AppModel {
    var $name = 'Player';
    var $belongsTo = array('Team');
}

(チームモデルには名前以外はありません)

PlayersController:

class PlayersController extends AppController {
    var $name = 'Players';

    function add() {
          $this->set('teams', $this->Player->Team->find('list'));
   //then save... 
    }

プレーヤーの追加ビューで:

//...
echo $form->input('squadra_id');
//...

わかりました。チームIDを含む選択があります。IDは必要ありませんが、チームの名前を入力してからIDを保存します:(htmlで)のようなもの

<select name="data[Player][team_id]" id="PlayerTeamId">
<option value="1">Cool Name 1</option>

<option value="2">Cool Name 2</option>
<!-- -->
<option value="{team id}">{team cool name}</option>
</select>

どのようにできるのか?

  • 解決策-

それ以外の

$this->set('teams', $this->Player->Team->find('list'));

これを入れて

$this->set('teams', $this->Player->Team->find('list', array('fields' => array('cool name') ) ) );
4

2 に答える 2

1

find( 'list' )モデルに対してaを実行しTeamており、そのモデルにはnameプロパティ (CakePHP はデフォルトで表示フィールドとして認識されます) があるため、取得する必要があるのは、キーがチーム ID で値がチームである連想配列です。名前。という名前の変数にその配列を設定しているという事実とteams組み合わせて、Cake が作業を行います。

あなたのフォームでは、どこ'squadra_id'から来たのかわかりませんが、それをに変更する'teams'と、選択リストがうまく表示されるはずです:

echo $form->input( 'teams' );

私があなたを正しく理解していれば、ビューの入力定義を除いて、この「魔法」を有効にするためのすべてが正しいです。http://book.cakephp.org/view/189/Automagic-Form-Elementsfind( 'list' )で、選択ボックスに自動的に入力する方法について詳しく読むことができます。

お役に立てれば。

于 2009-08-30T13:16:12.637 に答える