Yii 1.1关系搜索问题

Yii 1.1关系搜索问题,yii,yii1.x,Yii,Yii1.x,1。表会议 型号名称coremeting 字段id、标题、开始时间、创建人 关系: 'MeetingParticipants' => array(self::HAS_MANY, 'MeetingParticipants', 'meeting_id'), 'meeting' => array(self::BELONGS_TO, 'CoreMeeting', 'meeting_id'), 'group' => array(self::BELONGS_TO, 'MeetingG

1。表
会议

型号名称
coremeting

字段
id、标题、开始时间、创建人

关系:

'MeetingParticipants' => array(self::HAS_MANY, 'MeetingParticipants', 'meeting_id'),
 'meeting' => array(self::BELONGS_TO, 'CoreMeeting', 'meeting_id'),
 'group' => array(self::BELONGS_TO, 'MeetingGroup', 'group_id'),
2。表
核心会议参与者

型号名称为会议参与者

字段为
id、会议id、参与者id、组id

关系:

'MeetingParticipants' => array(self::HAS_MANY, 'MeetingParticipants', 'meeting_id'),
 'meeting' => array(self::BELONGS_TO, 'CoreMeeting', 'meeting_id'),
 'group' => array(self::BELONGS_TO, 'MeetingGroup', 'group_id'),
3。表
核心会议组

型号名称为
MeetingGroup

字段为
id、组名

会议模型中的我的搜索筛选器为:

public function search()
{
    
    $group=filter_var($_REQUEST['group'], FILTER_SANITIZE_STRING);//contain group name

    $criteria=new CDbCriteria;
    $user_id = Yii::app()->user->id;

    $criteria->compare('id',$this->id);
    $criteria->compare('title',$this->title,true);
    $criteria->with=array('MeetingParticipants'=>array("select"=>"*"),'MeetingParticipants.group'=>array('select'=>'id,group_name'));
    
    if(isset($this->start_time) && !empty($this->start_time))
    $criteria->compare('start_time',date("Y-m-d", strtotime($this->start_time)), true);

    $criteria->compare('created_by',$user_id);

    if(isset($group)&&!empty($group))
    $criteria->compare('group.group_name',$group);
    $criteria->together = true;


    return new CActiveDataProvider($this, array(
        'criteria'=>$criteria,

    ));
}
我已经创建了4个会议,每个会议至少有5个参与者每个参与者都属于一个会议组。我想列出所有会议,包括以下归档会议标题、小组和会议时间

我的问题是如果我启用
$criteria->together=true如果会议参与者超过10人,则在网格视图中仅显示1个会议。如果禁用此选项,将显示所有,但我无法使用会议名称进行搜索。
SQL fiddle链接是

完整的SQL转储

文档,用于
CDbCriteria
->
一起
属性:

外部表是否应在单个SQL中与主表联接此属性仅用于HAS\u MANY和MANY\u MANY关系的关系AR查询。

正如我在
coremeting
model中看到的那样:

'group'=>数组(self::属于'MeetingGroup','groupid')

显然,您正试图通过全局设置为您的
CDbCriteria
->
->
来获取一对一(属于)关系
coremeting
->
=true;根据文档,这是不正确的

我的建议是,首先将此全局
设置一起去掉
CDbCriteria
,然后尝试更改with子句,如下所示:

$criteria->with = [
    // this is your has-many relation (one meeting has several participants), thus we set here `together` to true
    'MeetingParticipants' => [
        'together' => true,
        'with' => [
            // this is your one-to-one relation (one participant has one group)
            'group'
        ]
    ]
];

CDBC标准的文档
->
一起
属性:

外部表是否应在单个SQL中与主表联接此属性仅用于HAS\u MANY和MANY\u MANY关系的关系AR查询。

正如我在
coremeting
model中看到的那样:

'group'=>数组(self::属于'MeetingGroup','groupid')

显然,您正试图通过全局设置为您的
CDbCriteria
->
->
来获取一对一(属于)关系
coremeting
->
=true;根据文档,这是不正确的

我的建议是,首先将此全局
设置一起去掉
CDbCriteria
,然后尝试更改with子句,如下所示:

$criteria->with = [
    // this is your has-many relation (one meeting has several participants), thus we set here `together` to true
    'MeetingParticipants' => [
        'together' => true,
        'with' => [
            // this is your one-to-one relation (one participant has one group)
            'group'
        ]
    ]
];

不工作无差异检查sql fiddle链接是完整的sql转储事实上,在我看到您的数据库结构后,我认为问题与sql无关。是否删除了全局$criteria->together=true?你所说的“无差异”是什么意思?结果现在是聚合的还是搜索不起作用?请提供更改代码后发生的详细信息。您好,请访问更改时输出的链接检查是否同时删除条件这是必需的输出,但无法执行搜索$CRITIES->group='t.id';尝试添加这一行。它将通过CoreMeting identifier主键进行分组,这将防止从HAS_-MANY关系聚合,并保证主模型的唯一性。不工作无差异检查sql fiddle链接是完整的sql转储事实上,在我看到您的数据库结构后,我认为问题与sql无关。是否删除了全局$criteria->together=true?你所说的“无差异”是什么意思?结果现在是聚合的还是搜索不起作用?请提供更改代码后发生的详细信息。您好,请访问更改时输出的链接检查是否同时删除条件这是必需的输出,但无法执行搜索$CRITIES->group='t.id';尝试添加这一行。它将通过CoreMeting identifier主键进行分组,主键将防止来自多个关系的聚合,并保证主模型的唯一性。