我有以下表格。
User:
---------
id<br>
firstName
Project:
---------
id<br>
Name
StaffingManager
---------------
id<br>
User_id(FK)<br>
Total_Staff<br>
StaffingProjectMonth
-----------------------
id<br>
Project_id(FK)<br>
StaffingManager_id(FK)<br>
我想在StaffingProjectMonth模型中定义关系
这是YII使用gii
定义的默认关系public function relations()
{
return array(
'project' => array(self::BELONGS_TO, 'Project', 'Project_id'),
'staffingManager' => array(self::BELONGS_TO, 'StaffingManager', 'StaffingManager_id'),
);
}
我能够获取ProjectName并按ProjectName搜索。
我想获取UserfirstName并按其搜索。
我以这种方式定义了这种关系。
return array(
'project' => array(self::BELONGS_TO, 'Project', 'Project_id'),
'staffingmanager' => array(self::BELONGS_TO, 'StaffingManager', 'StaffingManager_id'),
'user'=> array(self::HAS_MANY,'User',array('User_id'=>'id'),'through'=>'staffingmanager' ),
);
在搜索方法中我这样做了:
$criteria->with = array('project','user');
//$criteria->compare('id',$this->id);
$criteria->compare('Name',$this->Project_id,true);
$criteria->compare('firstName',$this->StaffingManager_id,true);
并在视图中:
$this->widget('zii.widgets.grid.CGridView', array(
'id'=>'staffing-project-month-grid',
'dataProvider'=>$model->search(),
'filter'=>$model,
'columns'=>array(
// 'id',
array('name'=>'Project_id','header'=>'Project','value'=>'$data->project->Name',),
array('name'=>'StaffingManager_id','header'=>'User','value'=>'$data->staffingmanager->user->firstName',),
..............
仅按项目名称搜索有效。能够查看UserfirstName但无法按firstName搜索。定义关系时有些错误。
感谢任何帮助。感谢。
答案 0 :(得分:2)
我推荐以下excellent wiki article by redguy,其中介绍了如何按相关模型属性进行搜索:
按照本文的方法:
您应该在模型中声明两个新变量:
public $project_name;
public $staffingmanager_firstname;
您应该使用rules()
方法声明这些新变量对搜索是安全的:
array( 'project_name,staffingmanager_firstname,...', 'safe', 'on'=>'search' ),
您的search()
方法标准应如下所示:
$criteria->compare('project.Name',$this->project_name,true);
$criteria->compare('user.firstName',$this->staffingmanager_firstname,true);
在您的视图文件中,“列”应为:
array('name'=>'project_name','header'=>'Project','value'=>'$data->project->Name',),
array('name'=>'staffingmanager_firstname','header'=>'User','value'=>'$data->user->firstName',),
希望这有帮助。
最好的问候......
答案 1 :(得分:0)
我遇到了与$ criteria-&gt; with和“through”关系的麻烦。 事情很亲切。 BELONGS_TO无效。我将它切换到HAS_ONE并反转id方向 - 数组('parent_id'=&gt;'id')。现在它正在运作!