0

私はcakephpでのテーブルの関連付けに本当に苦労しています。私がやろうとしているのは、2つのテーブルを関連付けることだけですが、一方のテーブルにはもう一方のテーブルへの2つの外部キーがあります。

何らかの理由で、home_idのフィールド選択フォームに表示される情報を取得できません...。

以下のデータベースの画像と関連するコードを参照してください。

私はcakephpを初めて使用しますが、これを釘付けにすることができれば、本当に役立つと思います。どんな助けでも大歓迎です。

データベーススキーマ

class SafcTeam extends AppModel {
    var $name = 'SafcTeam';
    var $displayField = 'name';
    var $validate = array(
            'name' => array(
                    'notempty' => array(
                            'rule' => array('notempty'),
                    ),
            ),
            'badge' => array(
                    'notempty' => array(
                            'rule' => array('notempty'),
                    ),
            ),
    );

    var $hasMany = array(
            'SafcTeam' => array(
                    'className' => 'SafcEvent',
                    'foreignKey' => 'home_id',
            )
    );

}


class SafcEvent extends AppModel {
    var $name = 'SafcEvent';
    var $displayField = 'id';
    var $validate = array(
            'safc_matchtype_id' => array(
                    'numeric' => array(
                            'rule' => array('numeric'),
                    ),
            ),
            'safc_league_id' => array(
                    'numeric' => array(
                            'rule' => array('numeric'),
                    ),
            ),
            'home_id' => array(
                    'numeric' => array(
                            'rule' => array('numeric'),
                    ),
            ),
            'away_id' => array(
                    'numeric' => array(
                            'rule' => array('numeric'),
                    ),
            ),
            'streamer_id' => array(
                    'numeric' => array(
                            'rule' => array('numeric'),
                    ),
            ),
            'safc_channel_id' => array(
                    'numeric' => array(
                            'rule' => array('numeric'),
                    ),
            ),
            'comments' => array(
                    'notempty' => array(
                            'rule' => array('notempty'),
                    ),
            ),
            'safc_profile_id' => array(
                    'numeric' => array(
                            'rule' => array('numeric'),
                    ),
            ),
            'safc_source_id' => array(
                    'numeric' => array(
                            'rule' => array('numeric'),
                    ),
            ),
            'event_info_url' => array(
                    'notempty' => array(
                            'rule' => array('notempty'),
                    ),
            ),
    );

    var $belongsTo = array(
            'SafcMatchtype' => array(
                    'className' => 'SafcMatchtype',
                    'foreignKey' => 'safc_matchtype_id'
            ),
            'SafcLeague' => array(
                    'className' => 'SafcLeague',
                    'foreignKey' => 'safc_league_id'
            ),
            'SafcChannel' => array(
                    'className' => 'SafcChannel',
                    'foreignKey' => 'safc_channel_id'
            ),
            'SafcProfile' => array(
                    'className' => 'SafcProfile',
                    'foreignKey' => 'safc_profile_id'
            ),
            'SafcSource' => array(
                    'className' => 'SafcSource',
                    'foreignKey' => 'safc_source_id'
            ),
            'SafcTeam' => array(
                    'className' => 'SafcTeam',
                    'foreignKey' => 'home_id'
            )
    );

}

4

2 に答える 2

0

Cakeは、箱から出して複雑なFKをサポートしていません。そのように、条件との関係を定義できます。

public $hasMany = array(
    'TheRelation' => array(
        'foreignKey' => false,
        'conditions' => array(
            ... conditions ...
        )
    )
)
于 2012-12-14T21:07:10.843 に答える
0

SafcTeam モデルのこのリレーションごとにエイリアスを使用する必要があります。

var $belongsTo = array(

//relationship for your home_id fk
        'SafcHomeTeam' => array(
                'className' => 'SafcTeam',
                'foreignKey' => 'home_id'
        ),

 //relationship for your away_id key
            'SafcAwayTeam' => array(
                    'className' => 'SafcTeam',
                    'foreignKey' => 'away_id'
            )
    );

また、関連する safc チーム モデル:

var $hasMany = array(
        'SafcHomeTeam' => array(
                'className' => 'SafcEvent',
                'foreignKey' => 'home_id',
        ),
       'SafcAwayTeam' => array(
                'className' => 'SafcEvent',
                'foreignKey' => 'away_id',
        )
); 

アクション add および edit の SafcEvents コントローラーで、これを追加します。

//to respect cake conventions need the select list to be plural (Teams <--- with a s at the end)
    $safcHomeTeams = $this->SafcEvent->SafcHomeTeam->find('list');
$safcAwayTeams = $this->SafcEvent->SafcAwayTeam->find('list');

//これらのリストもビューに渡します $this->set(compact('SafcAwayTeams', 'SafcHomeTeams));

セーフイベント ビューで 追加と編集

フォームセクションで:

//to respect cake convention to construct your select input properly 
//you need to refere to the list established in the controller ($SafcHomeTeams by using $SafcHomeTeam_id <--singular + "_" + "id")
        echo $this->Form->input('SafcAwayTeam_id'); 
        echo $this->Form->input('SafcHomeTeam_id');
于 2012-12-15T19:19:53.903 に答える