yii多对多CDBC标准,在桥接表中具有类型列

yii多对多CDBC标准,在桥接表中具有类型列,yii,Yii,人才模型关系: 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 public function relations() {

人才模型关系:

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
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)'),
    );
}
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)'),
    );
}
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)'),
    );
}
代理模型关系:

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
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)'),
    );
}
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)'),
    );
}
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)'),
    );
}
代理类型关系:

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
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)'),
    );
}
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)'),
    );
}
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)'),
    );
}
人才关系:

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
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)'),
    );
}
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)'),
    );
}
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)'),
    );
}
在我的网格视图中,我为每个人才列出了3种不同的代理类型:

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'),
    );
}
在我的网格视图搜索过滤器中,我试图能够独立地按每个不同的代理类型进行过滤,但我不确定在哪里添加代理类型过滤器,以下是我迄今为止所做的:

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')),
),

如何按代理类型\u id进行筛选?谢谢

为了帮助其他遇到这个问题的人,我最后做了以下几点:

标准:

$criteria=new CDbCriteria;
$criteria->with = array('agent');
$criteria->together = true;
$criteria->compare('agent.agent_id',$this->agent_primary);
然后,您可以应用比较标准(是的,我现在硬编码了类型id):


是否加入
AgentType
表?您可以连接多个表,而不仅仅是一个表。您的意思是
$criteria->with=array('agent_type')?是的,如果必须,您可以同时使用
agent
agent\u type
,例如:
$criteria->with=array('agent','agent\u type')