Yii 1.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
会议
型号名称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主键进行分组,主键将防止来自多个关系的聚合,并保证主模型的唯一性。