我是Yii的新手,我有一个表'Student'
,其中包含'stdStudentId'
,'stdName'
等字段。我正在编写API,所以这些数据应该以JSON格式返回。现在,因为我希望JSON中的字段名就像'id'
,'name'
一样,并且我不希望返回所有字段,所以我在模型中创建了一个方法:
public function APIfindByPk($id){
$student = $this->findByPk($id);
return array(
'id'=>$student->stdStudentId,
'name'=>$student->stdName,
'school'=>$student->stdSchool
);
}
问题是,stdSchool
是一个关系,在这种情况下,$student->stdSchool
返回包含schSchoolId
,schName
等字段的数组。我不希望字段在JSON中被那样命名,我也不希望返回School
中的所有字段,我想添加一些我自己的字段。在Yii中有办法做到这一点吗,还是我必须通过编写这样的方法来手动完成?
3条答案
按热度按时间trnvg8h31#
我一直在寻找同样的东西。有一个伟大的PHP库命名分形让你实现它:http://fractal.thephpleague.com/
为了简单地解释这个库,你为你的每个模型创建一个Transformer,它将在你的模型属性和需要使用api公开的属性之间进行Map。
在转换器中,您还可以设置此模型具有的关系:
所以在最后你会叫
用一个答案来描述分形的所有潜力并不容易,但你真的应该给予。我和Yii沿着使用它,所以如果你有什么问题,不要犹豫!
kh212irz2#
因为你使用Yii active record从数据库中获取值,所以要求数据库使用 * 列别名 *。
一般的SQL如下所示:
在Yii中,您可以将Criteria应用到findByPK()函数中,请参考:http://www.yiiframework.com/doc/api/1.1/CActiveRecord#findByPk-detail
请注意,为了使用这样的列别名,您必须在Student{}模型中定义一个虚拟属性Student_Number。
bksxznpy3#
重写ActiveRecord的populateRecord()函数就可以实现这一点!
My DishType有5个属性,并覆盖populateRecord函数Yii在从数据库中获取记录时会调用此函数。
我的代码在这里!
}