活动记录 - 如何选择具有关系的列?

时间:2013-04-24 21:37:53

标签: yii

项目可以拥有无​​限数量的列(形成表格或其他内容),关系很多,很多。为了实现这个tbl_project_rel_column已创建。 Project表格中列的stores project_idcolumn_id和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'值?

1 个答案:

答案 0 :(得分:3)

您可以使用through功能代替MANY_MANYposition列的index结果也可能有用。尝试这样的事情:

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}";
}