首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Yii CActiveRecord:查找相关数据,但不使用主键

Yii CActiveRecord:查找相关数据,但不使用主键
EN

Stack Overflow用户
提问于 2011-10-06 11:12:22
回答 2查看 2.8K关注 0票数 3

我在我的"Application“模型中有这段代码,我正在尝试获取所有相关的"Campaign”对象

代码语言:javascript
运行
复制
public function relations()
{
    return array(
        'campaigns' => array(self::HAS_MANY, 'Campaign', 'appKey'),
    );
}

我的问题是,campaigns表中的'appKey‘字段不是applications表的主键,而是Yii用来尝试查找活动的主键。

我的应用程序表的主键是'id‘,但我希望它使用'appKey’。我如何更新我的关系方法来做到这一点,而不是使它成为主键?

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-10-11 21:46:11

您可以在活动模型中设置named scope,如下所示:

代码语言:javascript
运行
复制
public function byApplication($appKey)
{
    $this->getDbCriteria()->mergeWith(array(
        'condition'=>'appKey = :appkey',
        'params'=>array('appKey'=>$appKey),
    ));
    return $this;
}

然后这样叫它:

代码语言:javascript
运行
复制
$campaigns = Campaign::model()->byApplication($appKey);

或者,正如Irobb所说,只需在应用程序模型中设置一个查询函数,而不是使用实际的关系,如下所示:

代码语言:javascript
运行
复制
public function getCampaigns() {
    return Campaign::model()->findallbyAttributes(array('appKey'=>$this->appKey));
}

并像调用应用程序$model上的正则关系一样调用它

代码语言:javascript
运行
复制
$campaigns = $model->campaigns; // remember with Yii you can call getters w/o the 'get'
票数 5
EN

Stack Overflow用户

发布于 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');}

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7669979

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档