通过PhpStorm Yii2中的魔术方法进行现场访问?

时间:2019-01-11 11:02:32

标签: php yii2 phpstorm

我执行以下查询并获取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 :(得分:4)

PHPStorm不知道$partnerFilterOption变量包含什么数据类型。您应该通过帮助PHPDoc注释将信息告知PHPStorm

/**
 * @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();

答案 1 :(得分:1)

在这种情况下,您可以使用findOne()-PhpStorm应该确定返回对象的类型:

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

对于更复杂的条件,需要使用find()one(),则需要使用@MaximFedorov建议的typehint(/* @var $partnerFilterOption PartnerFilterOption */)。