我在我的"Application“模型中有这段代码,我正在尝试获取所有相关的"Campaign”对象
public function relations()
{
return array(
'campaigns' => array(self::HAS_MANY, 'Campaign', 'appKey'),
);
}我的问题是,campaigns表中的'appKey‘字段不是applications表的主键,而是Yii用来尝试查找活动的主键。
我的应用程序表的主键是'id‘,但我希望它使用'appKey’。我如何更新我的关系方法来做到这一点,而不是使它成为主键?
谢谢。
发布于 2011-10-11 21:46:11
您可以在活动模型中设置named scope,如下所示:
public function byApplication($appKey)
{
$this->getDbCriteria()->mergeWith(array(
'condition'=>'appKey = :appkey',
'params'=>array('appKey'=>$appKey),
));
return $this;
}然后这样叫它:
$campaigns = Campaign::model()->byApplication($appKey);或者,正如Irobb所说,只需在应用程序模型中设置一个查询函数,而不是使用实际的关系,如下所示:
public function getCampaigns() {
return Campaign::model()->findallbyAttributes(array('appKey'=>$this->appKey));
}并像调用应用程序$model上的正则关系一样调用它
$campaigns = $model->campaigns; // remember with Yii you can call getters w/o the 'get'发布于 2011-10-06 19:55:00
有几件事。AR主要用于将单个表建模为一个类,具有定义良好的主键...其他任何事情我都会使用查询构建器。
注意: AR并不意味着要解决所有与数据库相关的任务。它最适合用于在PHP构造中对数据库表进行建模,以及执行不涉及复杂SQL的查询。对于那些复杂的场景,应该使用易刀。
http://www.yiiframework.com/doc/guide/1.1/en/database.ar
AR依赖于定义良好的表的主键。如果表没有主键,则需要相应的AR类通过重写primaryKey()方法来指定哪些列应该是主键,如下所示。
public function primaryKey() { return 'id';//对于复合主键,返回如下数组// return array('pk1','pk2');}
https://stackoverflow.com/questions/7669979
复制相似问题