Intereting Posts
конвертировать в UTC без изменения настроек часового пояса php не удалось очистить содержимое с веб-сайта PHP 5.3: mysqli_multi_query и ошибки «команды из синхронизации» Доступ к локальному приложению Laravel 5 локально с внешнего устройства Почему у меня есть фатальная ошибка: вызов функции-члена для подготовки () к не-объекту? Ошибка PHP Parse: синтаксическая ошибка, неожиданный T_PUBLIC ошибка с ошибкой сервера wamp # 2002 не удалось открыть phpMyAdmin Symfony2: проверка завершена при первой ошибке Лучший способ передать JSON из браузера в PHP с помощью Ajax.Request попытка установить FOSUserBundle, но получить ошибку Создайте файл Tar из каталога на PHP без exec / passthru Как получить модульный тест для входа в приложение Zend с помощью PHPUnit Guzzle: обрабатывать 400 плохих запросов PHP / MYSQL Javascript – Вставьте значение строки, вытащенную из базы данных в текстовое поле, кнопкой Установка расширения PHP OAuth на WAMP

Как я могу работать со отношениями «многие ко многим» в Yii2

Например, один из многих из-за документации ( http://www.yiiframework.com/doc-2.0/guide-db-active-record.html#relational-data ) вы можете связать две модели таким образом (one-many = company-zone) :

 $defaultZone = new Zone; $defaultZone->name = Zone::DEFAULT_ZONE; $company->link('zones', $defaultZone); 

Но как это работает для отношений «многие ко многим», когда у вас есть транзитная таблица типа tbl_user_market(user_id, market_id) ?

При использовании таблицы соединений для отношений «многие-ко-многим» вы должны

  1. Определим соотношения
  2. Свяжите две модели вместе

В модели User определите следующую функцию отношения:

 public function getMarkets() { return $this->hasMany(Market::className(), ['id' => 'market_id']) ->viaTable('tbl_user_market', ['user_id' => 'id']); } 

В модели рынка определите следующую функцию отношения:

 public function getUsers() { return $this->hasMany(User::className(), ['id' => 'user_id']) ->viaTable('tbl_user_market', ['market_id' => 'id']); } 

И, наконец, после сохранения обеих моделей свяжите их вместе:

 $user = new User; $user->name = 'Foo'; $user->save(); $market = new Market; $market->name = 'Bar'; $market->save(); $user->link('markets', $market); 

Вызов link() будет заполнять таблицу соединений.

Ссылка: http://www.yiiframework.com/doc-2.0/yii-db-baseactiverecord.html#link()-detail