2012-04-20 7 views
1

私は以下の表を持っています。yii 'through' relation search

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によって定義されたデフォルトの関係で、私はプロジェクト名を取得し、プロジェクト名で検索することができました

public function relations() 
    { 
     return array(
      'project' => array(self::BELONGS_TO, 'Project', 'Project_id'), 
      'staffingManager' => array(self::BELONGS_TO, 'StaffingManager', 'StaffingManager_id'), 
     ); 
    } 

GII 。

私は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'), 
     ); 

と検索方法で私はこれでした:プロジェクト名の作品からのみ検索

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

$criteria->with = array('project','user'); 
//$criteria->compare('id',$this->id); 
$criteria->compare('Name',$this->Project_id,true); 
$criteria->compare('firstName',$this->StaffingManager_id,true); 

やビュー内を。 UserfirstNameはセッションできますが、firstNameで検索することはできません。関係を定義することに間違いがあります。

何か助けていただければ幸いです。ありがとう。関連するモデルで検索する方法を説明し

答えて

2

私は、次のexcellent wiki article by redguyをお勧めしますが、属性:この記事のアプローチに続い

を:

public $project_name; 
public $staffingmanager_firstname; 

あなたはあなたのモデルに2つの新しい変数を宣言する必要があります

これらの新しい変数は、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',), 

は、この情報がお役に立てば幸いです。私が持つと関係「を通じて」> $基準 - とのトラブルがあった

0

よろしく...。 関係は種類のものでした。 BELONGS_TOが正しく動作しません。私はそれをHAS_ONEに切り替え、idの方向を逆にしました - array( 'parent_id' => 'id')。今それは働いている!