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 モデルでリレーションを定義したい

これは、gii を使用して YII によって定義されたデフォルトのリレーションです。

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 で検索できません。リレーションの定義に誤りがあります。

どんな助けでも大歓迎です。ありがとう。

4

2 に答える 2

2

関連するモデル属性で検索する方法を説明している、redguyによる次の優れたwiki記事をお勧めします。

この記事のアプローチに従う:

モデルで2つの新しい変数を宣言する必要があります。

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 と ”through” の関係で問題がありました。物は関係親切でした。BEONGS_TO が正しく動作しません。私はそれを HAS_ONE に切り替え、id の方向を逆にしました — array('parent_id'=>'id')。今、それは働いています!

于 2014-10-23T15:56:47.103 に答える