junction table many to many

Może mi ktoś wytłumaczyć do czego w ogóle to służy? w sensie to via() albo viaTable()? czytam i czytam dokumentację i nic z tego nie mogę zrozumiec.

mam tabelę

products

order

order_products (many to many)

  • idorder

  • id products

Po co i jak tego używać?

W przypadku relacji wiele do wielu kiedy masz tablice pośrednią musisz podać w relacji sposób złączenia.

Za pomocą viaTable kiedy podajesz tabele pośrednią




    public function getItems()

    {

        return $this->hasMany(Item::className(), ['id' => 'item_id'])

            ->viaTable('order_item', ['order_id' => 'id']);

    }



lub via kiedy podajesz relację. Relacje oczywiście należy zdefiniować i nie musi zawierać tylko kluczy, ale mogą być też tam warunki dodatkowe.




    public function getItems()

    {

        return $this->hasMany(Item::className(), ['id' => 'item_id'])

            ->via('orderItems');

    }


    public function getOrderItems()

    {

        return $this->hasMany(OrderItem::className(), ['order_id' => 'id']);

    }




W praktyce relacja oraz viaTable mogą zawierać tą samą definicję, sposób wiązania.