I wanted to implement the functionality of individual prices in Yii2 , they helped me to approach the solution, but there is one problem:

When requesting data, in a cell of an object with a key identical to the name of a connection, I get null. At the same time, the necessary value is stored in the _releted private field.

We have an AR request:

Service::find() ->where(['active' => 1]) ->orderBy(['price' => SORT_ASC]) ->joinWith('individualPrice') ->one() 

Communication individualPrice:

 public function getIndividualPrice() { return $this->hasOne(UniqueService::class, ['service_id' => 'id'])->andWhere(['user_id' => \Yii::$app->user->id]); } 

But the answer in the individualPrice field, as I wrote earlier, contains null. But in $ object -> _ related-> individualPrice needed.

 object(common\models\Service)#132 (11) { ["individualPrice"]=> NULL ["_attributes":"yii\db\BaseActiveRecord":private]=> array(11) { ["id"]=> int(1) ["group_service"]=> int(1) ["name"]=> string(12) "Some Service" ["description"]=> string(11) "Service dec" ["price"]=> float(0.02) ["min"]=> int(1) ["max"]=> int(50000) ["max_order"]=> int(0) ["active"]=> int(1) } ["_oldAttributes":"yii\db\BaseActiveRecord":private]=> array(11) { ["id"]=> int(1) ["group_service"]=> int(1) ["name"]=> string(12) "Some Service" ["description"]=> string(11) "Service dec" ["price"]=> float(0.02) ["min"]=> int(1) ["max"]=> int(50000) ["max_order"]=> int(0) ["active"]=> int(1) } ["_related":"yii\db\BaseActiveRecord":private]=> array(1) { ["individualPrice"]=> object(common\models\UniqueService)#148 (10) { ["_attributes":"yii\db\BaseActiveRecord":private]=> array(4) { ["id"]=> int(12) ["user_id"]=> int(4296) ["service_id"]=> int(1) ["price"]=> float(1.44) } ["_oldAttributes":"yii\db\BaseActiveRecord":private]=> array(4) { ["id"]=> int(12) ["user_id"]=> int(4296) ["service_id"]=> int(1) ["price"]=> float(1.44) } ["_related":"yii\db\BaseActiveRecord":private]=> array(0) { } ["_relationsDependencies":"yii\db\BaseActiveRecord":private]=> array(0) { } ["_errors":"yii\base\Model":private]=> NULL ["_validators":"yii\base\Model":private]=> NULL ["_scenario":"yii\base\Model":private]=> string(7) "default" ["_events":"yii\base\Component":private]=> array(0) { } ["_eventWildcards":"yii\base\Component":private]=> array(0) { } ["_behaviors":"yii\base\Component":private]=> array(0) { } } } ["_relationsDependencies":"yii\db\BaseActiveRecord":private]=> array(0) { } ["_errors":"yii\base\Model":private]=> NULL ["_validators":"yii\base\Model":private]=> NULL ["_scenario":"yii\base\Model":private]=> string(7) "default" ["_events":"yii\base\Component":private]=> array(0) { } ["_eventWildcards":"yii\base\Component":private]=> array(0) { } ["_behaviors":"yii\base\Component":private]=> array(0) { } } 
  • We must specifically determine where the individualPrice will be. Either in the field (property) or in another model. You must rename the property or the relation. - fedornabilkin

0