Via relation bug?

Db schema:




class Order extends \yii\db\ActiveRecord

{

    public $id;

    public $user_id;  

}


public DeliveryTypes extends \yii\db\ActiveRecord

{

    public $order_id;

    public $type_name;

}


class OrderVip extends \yii\db\ActiveRecord

{

  public function getOrder()

  {

    return $this->hasOne(Order::class, ['id' => 'order_id']);

  }


  public function getDeliveryTypes()

  {

    return $this->hasMany(OrderDelivery::className(), ['order_id' => 'id'])->via('order')

  }

}



Code example:




$order = new Order;

$order->user_id = UserFacade::getCurrentUserId();

$orderVip = new OrderVip();

$orderVip->populateRelation('order', $order);



If i call:




$deliveryTypes = $orderVip->deliveryTypes;



$oderVip->order is null now!

Bug in code:

class yii\db\ActiveQuery

function: public function prepare($builder)




list($viaName, $viaQuery) = $this->via;

if ($viaQuery->multiple) {

    $viaModels = $viaQuery->all();

    $this->primaryModel->populateRelation($viaName, $viaModels);

} else {

    $model = $viaQuery->one();

    $this->primaryModel->populateRelation($viaName, $model);

    $viaModels = $model === null ? [] : [$model];

}

$this->filterByModels($viaModels);



I think it need checking if relation exists:




list($viaName, $viaQuery) = $this->via;

if ($this->primaryModel->isRelationPopulated($viaName)) {

      $viaModels = $this->primaryModel->getRelatedRecords()[$viaName];

} else {

  if ($viaQuery->multiple) {

      $viaModels = $viaQuery->all();

      $this->primaryModel->populateRelation($viaName, $viaModels);

  } else {

      $model = $viaQuery->one();

      $this->primaryModel->populateRelation($viaName, $model);

      $viaModels = $model === null ? [] : [$model];

  }

}

$this->filterByModels($viaModels);