isnewrecord filterwhere delete php many-to-many yii2

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

  1. Definir las relaciones
  2. 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