Доступ к полю с помощью магического метода в PhpStorm Yii2? - PullRequest
0 голосов
/ 11 января 2019

Я выполняю следующий запрос и получаю объект PartnerFilterOption модели:

$partnerFilterOption = PartnerFilterOption::find()
    ->where(['=', 'ad_filter_option_id', $filterOptionId])
    ->andWhere(['=', 'ad_partner_filter_id', $partnerFilter['id']])
    ->one();

Но если я попытаюсь получить атрибут модели, например:

$value = $partnerFilterOption->mapping_value;

Я получаю ошибку в PhpStorm.

Ответы [ 2 ]

0 голосов
/ 11 января 2019

В этом случае вы можете использовать findOne() - PhpStorm должен определить тип возвращаемого объекта:

$partnerFilterOption = PartnerFilterOption::findOne([
        'ad_filter_option_id' => $filterOptionId,
        'ad_partner_filter_id' => $partnerFilter['id'],
    ]);

Для более сложных условий, где вам нужно использовать find() и one(), вам нужно использовать typehint (/* @var $partnerFilterOption PartnerFilterOption */), как предложил @MaximFedorov.

0 голосов
/ 11 января 2019

PHPStorm не знает, какой тип данных содержится в переменной $partnerFilterOption. Вы должны сообщить PHPStorm эту информацию с помощью комментария PHPDoc

/**
 * @var PartnerFilterOption $partnerFilterOption
 */
$partnerFilterOption = PartnerFilterOption::find()
    ->where(['=', 'ad_filter_option_id', $filterOptionId])
    ->andWhere(['=', 'ad_partner_filter_id', $partnerFilter['id']])
    ->one();

P.S. Ваш запрос может быть написан более удобным для чтения

$partnerFilterOption = PartnerFilterOption::find()
    ->where([
         'ad_filter_option_id' => $filterOptionId,
         'ad_partner_filter_id' => $partnerFilter['id']
    ])->one();
...