0

项目可以有无限数量的列(形成一个表或其他东西),关系 MANY 到 MANY。为了实现这tbl_project_rel_column一点,创建。它stores project_id,与项目表中列的column_idpos位置。

我正在使用 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”值?

4

1 回答 1

3

您可以使用该through功能而不是MANY_MANY. 按列索引结果也可能很有用position。尝试这样的事情:

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}";
}
于 2013-04-25T06:49:01.420 回答