php - filterwhere - yii2 expression where
¿Cómo trabajo con relaciones de muchos a muchos en Yii2? (1)
Por ejemplo, en uno-a-muchos debido a la documentación ( http://www.yiiframework.com/doc-2.0/guide-db-active-record.html#relational-data ) puede vincular dos modelos de esta manera (one-many = company-zone)
:
$defaultZone = new Zone;
$defaultZone->name = Zone::DEFAULT_ZONE;
$company->link(''zones'', $defaultZone);
¿Pero cómo funciona para las relaciones de muchos a muchos cuando tiene una tabla de tránsito como tbl_user_market(user_id, market_id)
?
Al usar una tabla de unión para relaciones de muchos a muchos, tiene que
- Definir las relaciones
- Une los dos modelos
En el modelo de Usuario, defina la siguiente función de relación:
public function getMarkets() {
return $this->hasMany(Market::className(), [''id'' => ''market_id''])
->viaTable(''tbl_user_market'', [''user_id'' => ''id'']);
}
En el modelo Market, defina la siguiente función de relación:
public function getUsers() {
return $this->hasMany(User::className(), [''id'' => ''user_id''])
->viaTable(''tbl_user_market'', [''market_id'' => ''id'']);
}
Y finalmente, después de guardar ambos modelos, vincularlos entre sí:
$user = new User;
$user->name = ''Foo'';
$user->save();
$market = new Market;
$market->name = ''Bar'';
$market->save();
$user->link(''markets'', $market);
La llamada a link()
rellenará la tabla de unión.
Referencia: http://www.yiiframework.com/doc-2.0/yii-db-baseactiverecord.html#link()-detail