О CakePHP 3 Принадлежит ко многим вопросам - PullRequest
0 голосов
/ 27 октября 2018

У меня проблема со следующим случаем:

Таблица пользователей

id, profile_id, name, created, modified

Таблица профилей

id, first_name, last_name, gender

Таблица предприятий

id, name, created, modified

У меня есть таблица отношений многие ко многим, чтобы связать profiles с businesses: businesses_profiles

id, business_id, profile_id, created, modified

Когда я пытаюсь создать новый бизнес, я бы хотел связать напрямую вошедший в систему идентификатор пользователя с бизнесом, который я создаю.

в моем profileTable, я добавил в initialize():

  $this->belongsToMany('Businesses', [
        'alias' => 'Businesses',
        'foreignKey' => 'profile_id',
        'targetForeignKey' => 'business_id',
        'joinTable' => 'businesses_profiles'
    ]);

в моем businessesTable, я также вставил initialize() метод:

 $this->belongsToMany('Profiles', [
        'alias' => 'Profiles',
        'foreignKey' => 'business_id',
        'targetForeignKey' => 'profile_id',
        'joinTable' => 'businesses_profiles'
    ]);

В каждой сущности Business & Profile я помещаю соответственно в правильный контекст:

protected $_accessible = [
    '*' => true,
    'id' => false,
    'businesses' => true,
    '_joinData' => true
];

и:

 protected $_accessible = [
    'name' => true,
    'slug' => true,
    'active' => true,
    'hash' => true,
    'data' => true,
    'approved' => true,
    'created' => true,
    'modified' => true,
    'profiles' => true,
    '_joinData' => true
];

Ничего не работает о сохранении в моей businesses_profiles таблице.

Заранее спасибо за помощь, Лучшее,

Laurent.

1 Ответ

0 голосов
/ 29 октября 2018

Большое спасибо за вашу помощь.Я нашел решение, используя метод link (), предоставленный CakePHP.

Я поделюсь здесь своей функцией добавления, если она может помочь другим:

public function add()
{
    $business = $this->Businesses->newEntity();

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

        $business = $this->Businesses->patchEntity($business, $this->request->getData());

        $business->set('hash');
        $business->set('active', 0);
        $business->set('slug');

        $profile = TableRegistry::getTableLocator()->get('Profiles')->get($this->_currentUser->profile_id);

        if ($this->Businesses->save($business)) {

            **$this->Businesses->Profiles->link($business, [$profile]);**
            $this->Flash->success(__('The business has been saved.'));

            return $this->redirect(['action' => 'index']);
        }
        else

        {
            debug($business->getErrors()); // debug
            $this->Flash->error(__('The business could not be saved. Please, try again.'));
        }
    }
    $this->set(compact('business'));
}
...