项目可以拥有无限数量的列(形成表格或其他内容),关系很多,很多。为了实现这个tbl_project_rel_column
已创建。 Project表格中列的stores project_id
,column_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'值?
答案 0 :(得分:3)
您可以使用through
功能代替MANY_MANY
。 position
列的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}";
}