Yii活动记录查找函数类提示

时间:2015-11-05 11:17:46

标签: php activerecord yii phpstorm phpdoc

我使用旧的yii卡住了 其活动记录模型可以如下使用:

class Booking extends CActiveRecord {
    /**
     * @param string $className
     * @return Booking
     */
    public static function model($className = __CLASS__)
    {
        return parent::model($className);
    }
    public function publish(){
       // code to publish the booking
    }

    // ... the rest of the generated code for the table

}

$model = Booking::model();
$model->getUnallocated();

$booking = $model->findByPk(815);
$booking->publish();

问题是IDE(PhpStorm)不允许我按住$booking->publish()中的发布功能,因为它不知道findByPk返回的值是Booking实例。

我可以解决这个问题,如下所示

class Booking extends CActiveRecord {
    /**
     * @return Booking|null
     */
    public function findByPk($pk,$condition='',$params=array())
    {
        return parent::findByPk($pk,$condition,$params);
    }

    // ... the rest of the class
}

问题是这个解决方案并不干净,现在我必须在每个AR模型类中定义每个提取函数findfindAllfindByPk .... / p>

另一种方法就是这样

/** @var Booking $booking */
$booking = $model->findByPk(815);

但是无论何时使用它都必须定义,这也很麻烦,因为它在很多地方使用过。

如果不添加任何方法定义,是否有一种干净的方法?

1 个答案:

答案 0 :(得分:0)

时间过去了,我找到了解决方案

诀窍是你可以在评论中返回@return static,这正是PHPStorm检测正确类所需要的,所以让我们创建一个扩展BaseModel的{​​{1}}和有正确的文档评论

因此请使用CActiveRecord

更改class MyClass extends CActiveRecord

使用它时,现在所有的类提示都可以工作:)

class MyClass extends BaseModel