2013-04-24 78 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}"; 
}