2013-04-24 73 views
0

項目可以有無限數量的列(形成一個表或其他東西),關係MANY MANY。爲了實現這個tbl_project_rel_column被創建。它stores project_id,column_id AND pos 位置在項目表中的列。活動記錄 - 如何選擇與關係的列?

我正在使用AC數據庫方法。我有2個模型項目和列。

項目模型的關係方法:

public function relations(){ 
    return array(
... 
'columns'=>array(self::MANY_MANY,'Column','tbl_project_rel_column('p_id','c_id') 
); 
} 

現在可以得到使用這樣的事情所有項目的列:

$model = Project::model()->findbyPk($p_id); 
$columns = $model->columns; 

但列沒有存儲的POS「(位置)值是一定的項目。

如何獲得某個項目和某個列的tpl_project_rel_column表的'pos'值?

回答

3

您可以使用through功能而不是MANY_MANYindexposition列的結果也可能有用。嘗試是這樣的:

public function relations() 
{ 
    return array(
     'projectColumns' => array(self::HAS_MANY, 'ProjectRelColumn', 'p_id', 'index'=>'position'), 
     'columns' => array(self::HAS_MANY, 'Column', 'c_id', 'through'=>'projectColumns'), 
} 

現在你可以爲項目列的查詢是這樣的:

$projects = Project::model()->with('columns')->findAll(); 
foreach($projects as $project) { 
    // projectColumns are indexed by position. You can sort by this now: 
    ksort($project->projectColumns) 
    foreach($project->projectColumns as $pos => $projectColumn) 
     echo "Pos: $pos Column: {$projectColumn->column->name}"; 
}