@MarkLb

Как получить данные по связанной модели, если возвращается null в ячейке нужной связи, при этом в _related нужные данные?

Задался целью реализовать функционал индивидуальных цен в Yii2, и благодаря активной помощи сообщества удалось прийти к решению, но в нем одна проблема - в нужной ячейки ответа AR содержится null, но вот в приватном свойстве _releted содержится верный ответ.

Мы имеем запрос AR:
Service::find()
                ->where(['active' => 1])
                ->orderBy(['price' => SORT_ASC])
                ->joinWith('individualPrice')
                ->one()


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


Но в ответе в поле individualPrice, как писал ранее, содержится null. А вот в $object->_related->individualPrice нужный.

Объект в результате
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) {
  }
}



Причем при вызове с asArray() получаю нужную информацию. Как можно получить так необходимые мне данные?
  • Вопрос задан
  • 58 просмотров
Пригласить эксперта
Ответы на вопрос 1
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
а почему joinWith? Я так понимаю тут join ни к чему, пробуйте так:
$tryam = Service::find()
                ->where(['active' => 1])
                ->orderBy(['price' => SORT_ASC])
                ->with('individualPrice')
                ->one();
print_r($tryam->individualPrice);
die();
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы