我使用旧的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模型类中定义每个提取函数find
,findAll
,findByPk
.... / p>
另一种方法就是这样
/** @var Booking $booking */
$booking = $model->findByPk(815);
但是无论何时使用它都必须定义,这也很麻烦,因为它在很多地方使用过。
如果不添加任何方法定义,是否有一种干净的方法?
答案 0 :(得分:0)
时间过去了,我找到了解决方案
诀窍是你可以在评论中返回@return static
,这正是PHPStorm检测正确类所需要的,所以让我们创建一个扩展BaseModel
的{{1}}和有正确的文档评论
因此请使用CActiveRecord
class MyClass extends CActiveRecord
使用它时,现在所有的类提示都可以工作:)
class MyClass extends BaseModel