For example in one-to-many due to documentation (http://www.yiiframework.com/doc-2.0/guide-db-active-record.html#relational-data) you can link two models in this way (one-many = company-zone)
:
$defaultZone = new Zone; $defaultZone->name = Zone::DEFAULT_ZONE; $company->link('zones', $defaultZone);
But how it works for many-to-many relations when you have transit table like tbl_user_market(user_id, market_id)
?
When using a junction table for many-to-many relations, you have to
In the User model define the following relation function:
public function getMarkets() { return $this->hasMany(Market::className(), ['id' => 'market_id']) ->viaTable('tbl_user_market', ['user_id' => 'id']); }
In the Market model define the following relation function:
public function getUsers() { return $this->hasMany(User::className(), ['id' => 'user_id']) ->viaTable('tbl_user_market', ['market_id' => 'id']); }
And finally, after saving both models, link them together:
$user = new User; $user->name = 'Foo'; $user->save(); $market = new Market; $market->name = 'Bar'; $market->save(); $user->link('markets', $market);
The call to link()
will populate the junction table.
Reference: http://www.yiiframework.com/doc-2.0/yii-db-baseactiverecord.html#link()-detail
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With