2

我有以下表格。

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

只有按项目名称搜索才有效。能够 sess UserfirstName 但无法按 firstName 搜索。定义关系有些错误。

任何帮助表示赞赏。谢谢。

4

2 回答 2

2

我推荐redguy的以下优秀 wiki 文章,它描述了如何按相关模型属性进行搜索:

按照本文的方法:

您应该在模型中声明两个新变量:

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

希望这可以帮助。

此致...

于 2012-05-30T22:02:19.597 回答
0

我遇到了 $criteria->with 和“通过”关系的麻烦。事情是有关系的。BELONGS_TO 无法正常工作。我将它切换到 HAS_ONE 并反转 id 方向 - array('parent_id'=>'id')。现在它正在工作!

于 2014-10-23T15:56:47.103 回答