3
여러 게임을 데이터베이스의 연속성에 연결하려고합니다.Cakephp 3에서 BelongsToMany 연결 사용하기
나는 연속 테이블, 연속 테이블 게임 및 게임 테이블 3 개가 있습니다. continuities_games 테이블에는 continuity_id와 game_id가 있습니다. 내 선택 입력에서 다른 게임을 선택하려고하면 데이터베이스에 새 게임 항목을 만든 다음 원래 선택한 게임에 연결하지 않고 새 게임 항목에 연결하는 항목을 조인 테이블에 만듭니다.
이
내 ContinuitiesTable의 초기화 함수이다 :public function initialize(array $config){
parent::initialize($config);
$this->belongsToMany('Games');
}
그리고 내 GamesTable을 위해 :
public function edit($id=null){
$continuity = $this->Continuities->find()->where(['id'=>$id])->contain('Games')->first();
if ($this->request->is(['post', 'put'])) {
debug($this->request->data);
$continuity->start_date = $this->request->data['start_date']['year'].'-'.$this->request->data['start_date']['month'].'-'.$this->request->data['start_date']['day'];
$continuity->end_date = $this->request->data['end_date']['year'].'-'.$this->request->data['end_date']['month'].'-'.$this->request->data['end_date']['day'];
//$continuity->start_date = $this->request->data['start_date'];
//$continuity->end_date = $this->request->data['end_date'];
$continuity->games = $this->request->data['games'];
debug($this->Continuities->newEntity($this->request->data)->toArray());
debug($continuity);
if ($result = $this->Continuities->save($continuity, ['associated'=>['Games']])) {
$this->Flash->success(__('The continuity has been updated.'));
return $this->redirect(['action' => 'view', $continuity->id]);
}
$this->Flash->error(__('Unable to update the continuity.'));
}
$games = $this->Continuities->Games->getGamesList();
$this->set(compact('continuity', 'games'));
}
그리고 마지막으로 :
public function initialize(array $config){
parent::initialize($config);
$this->displayField('name');
$this->addBehavior('Tree');
//Associations
$this->hasMany('Children', [
'className' => 'Games',
'foreignKey' => 'parent_id',
'dependant' => true,
'cascadeCallbacks' => true,
]);
$this->belongsTo('Parent', [
'className' => 'Games',
]);
$this->hasMany('Books');
$this->belongsToMany('Continuities');
}
이것은 ContinuitiesController 내 편집 기능입니다 edit.ctp 양식 :
<?= $this->Form->create($continuity) ?>
<fieldset>
<legend><?= __('Edit Continuity') ?></legend>
<?= $this->Form->input('start_date') ?>
<?= $this->Form->input('end_date') ?>
<?= $this->Form->input('games', ['multiple'=>true]) ?>
</fieldset>
<?= $this->Form->button(__('Submit')); ?>
<?= $this->Form->end() ?>
감사합니다.
레이아웃에서'games.ids' ('tablename'._ids)에 대해 언급하지 않으면 이것이 작동하지 않습니다. 대단히 감사합니다. –