2015-06-21 4 views
0

У меня есть две модели (или таблиц в CakePHP 3), один из них является Департамент, а другой менеджер, я сделал объединение «hasOne» между этими двумя:Сохранение hasOne ассоциации в CakePHP 3

Департамент Таблица (база данных):

------------------------ 
| id | name | location | 
------------------------ 
| 1 | IT | New York | 
------------------------ 

Table Manager (база данных):

----------------------------------------- 
| id | name | address | department_id | 
----------------------------------------- 
| 1 | Mike | New York | 1    | 
----------------------------------------- 

DepartmentsTable.php

<?php 
namespace App\Model\Table; 

use Cake\ORM\Table; 
use Cake\Validation\Validator; 

class DepartmentsTable extends Table { 

    public function initialize(array $config){ 

    } 

} 

ManagersTable.php

<?php 
namespace App\Model\Table; 

use Cake\ORM\Table; 
use Cake\Validation\Validator; 

class ManagersTable extends Table { 


    public function initialize(array $config){ 
     $this->hasOne('Departments'); 
    } 

} 

Я создал форму, чтобы я мог спасти человека с его адрес:

<?php echo $this->Form->create($manager); ?> 
<?php echo $this->Form->input('Manager.name'); ?> 
<?php echo $this->Form->input('Manager.address'); ?> 
<?php echo $this->Form->input('Manager.department.name'); ?> 
<?php echo $this->Form->input('Manager.department.location'); ?> 
<?php echo $this->Form->end('valider'); ?> 

и это контроллер:

<?php 
namespace App\Controller\Adminocity; 

use App\Controller\AppController; 
use Cake\Core\Configure; 
use Cake\Network\Exception\NotFoundException; 
use Cake\View\Exception\MissingTemplateException; 
use Cake\Cache\Cache; 
use Cake\ORM\TableRegistry; 
use Cake\Event\Event; 

class ManagersController extends AppController { 

    public function edit_manager($id=null) 
    { 
     $this->loadModel('Departments'); 

     $manager = $this->Managers->newEntity(); 

     if($this->request->is('post')){ 

      $managersTable = TableRegistry::get('Managers'); 
      $manager = $managersTable->patchEntity($manager,$this->request->data(), ['associated' => ['Departments']]); 


       if($managersTable->save($manager)){ 
        $this->Flash->success(__('Manager ajouté avec succès')); 
        return $this->redirect(['action' => 'list_managers']); 
       } 
     } 

     $this->set('manager', $manager); 
    } 
} 

Когда я пытаюсь o отправьте форму после ее заполнения, две новые строки «Департаменты» и «Менеджер» будут добавлены успешно, но новая строка «Менеджер» имеет значение «NULL» в столбце «department_id» вместо значения id недавно созданной строки «Департамент».

Пожалуйста, помогите мне решить эту проблему?

ответ

0

Тип отношения должны быть belongsTo()

Как правило, вы можете знать, когда использовать belongsTo или hasOne:

  • belongsTo: Внешний ключ находится в той же таблице (Менеджеры имеет department_id)
  • hasOne: внешний ключ находится в другом столе. (Department hasOne Manager)
+0

Спасибо, это помогло много –