首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >yii网桥表中具有类型列的多对多CDbCriteria

yii网桥表中具有类型列的多对多CDbCriteria
EN

Stack Overflow用户
提问于 2012-12-03 13:09:07
回答 1查看 2.3K关注 0票数 0
代码语言:javascript
复制
Table AgentType:
agent_type_id
agent_type_name

Table Agent:
agent_id
agent_name

Table Talent:
talent_id
talent_name

Table TalentAgent:
talent_id
agent_id
agent_type_id

Table AgentType
agent_id
agent_type_id

人才模型关系:

代码语言:javascript
复制
public function relations() {
    return array(
       'talent_agent' => array(self::HAS_MANY, 'TalentAgent', 'talent_id'),
       'agent' => array(self::HAS_MANY, 'Agent', 'agent_id', 'through' => 'talent_agent'),
       'agents' => array(self::MANY_MANY, 'Agent', 'nca_talent_agent(talent_id,agent_id)'),
    );
}

代理模型关系:

代码语言:javascript
复制
public function relations()
{
    return array(
        'talent_agent' => array(self::HAS_MANY, 'TalentAgent', 'agent_id'),
        'talent' => array(self::HAS_MANY, 'Talent', 'talent_id', 'through' => 'talent_agent'),
        'agent_type' => array(self::MANY_MANY, 'AgentType', 'nca_agent_agent_type(agent_id,agent_type_id)'),
    );
}

AgentType关系:

代码语言:javascript
复制
public function relations()
{
    return array(
        'talent' => array(self::MANY_MANY, 'Talent', 'nca_talent_agent(talent_id,agent_id,agent_type_id)'),
        'agent' => array(self::MANY_MANY, 'Agent', 'nca_agent_agent_type(agent_id,agent_type_id)'),
    );
}

TalentAgent关系:

代码语言:javascript
复制
public function relations()
{
    return array(
        'talent' => array(self::BELONGS_TO, 'Talent', 'talent_id'),
        'agent' => array(self::BELONGS_TO, 'Agent', 'agent_id'),
        'agent_type' => array(self::BELONGS_TO, 'AgentType', 'agent_type_id'),
    );
}

在我的网格视图中,我为每个人才列出了3种不同的座席类型:

代码语言:javascript
复制
array(
    'name'=>'agent_primary',
    'value'=>'$data->getPrimaryAgent($data->talent_id, false)',
    'filter'=>CHtml::activeDropDownList($model, 'agent_primary', CHtml::listData(Agent::model()->with('agent_type')->findAll(array('condition'=>'agent_type.agent_type_id = 1')),'agent_id', 'name')),
),
array(
    'name'=>'agent_voice',
    'value'=>'$data->getVoiceAgent($data->talent_id, false)',
    'filter'=>CHtml::activeDropDownList($model, 'agent_voice', CHtml::listData(Agent::model()->with('agent_type')->findAll(array('condition'=>'agent_type.agent_type_id = 2')),'agent_id', 'name')),
),
array(
    'name'=>'agent_commercial',
    'value'=>'$data->getCommercialAgent($data->talent_id, false)',
    'filter'=>CHtml::activeDropDownList($model, 'agent_commercial', CHtml::listData(Agent::model()->with('agent_type')->findAll(array('condition'=>'agent_type.agent_type_id = 3')),'agent_id', 'name')),
),

在我对网格视图的搜索筛选器中,我试图能够独立地按每种不同的代理类型进行筛选,但我不确定在何处添加代理类型筛选器,以下是我到目前为止所拥有的:

代码语言:javascript
复制
$criteria=new CDbCriteria;
$criteria->with = array('agent');
$criteria->together = true;
$criteria->compare('agent.agent_id',$this->agent_primary);

如何按agent_type_id过滤?谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-12-14 13:41:09

为了帮助遇到这个问题的其他人,这里是我最后所做的:

条件:

代码语言:javascript
复制
$criteria=new CDbCriteria;
$criteria->with = array('agent','agent.agent_type');
$criteria->together = true;

然后,您可以应用您的比较条件(是的,我现在对type_id进行了硬编码):

代码语言:javascript
复制
$criteria->compare("agent_type.agent_type_id",array(3));
$criteria->compare('agent.agent_id', $this->primary_agent_id);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13677483

复制
相关文章

相似问题

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