我已经在Yii框架(Yii级别:初学者)中开始了一个项目。我决定使用WP样式数据库表来存储我的条目,并将它们分配给不同的类别,子类别,并为条目分配多个标签。
因此,基本上,这是表格(注意这里的名称是单数):
tbl_entry(条目)
tbl_terms(名称,类别,子类别,标签的标签)
tbl_term_taxonomy(类别,子类别,标签分类法)
tbl_term_relationship(基于条目的ID,将创建一个关系)
到目前为止,我所能获取的全部内容(猫,子猫,标签)。我还能够区分类别和子类别,但不能按层次结构对它们进行排序。
我需要他们是:
Category 1
Subcategory of Cat 1
Another subcat of Cat 1
Category 2
Subcategory of Cat 2
Another subcat of Cat 2
Yet another subcat of Cat 2
Catwegory 3
etc.
当前,它们显示如下内容:
Another subcat of Cat 1
Category 2
Subcategory of Cat 2
Another subcat of Cat 2
Category 1
Subcategory of Cat 1
Another subcat of Cat 1
Yet another subcat of Cat 2
Catwegory 3
关键是:它们以没有有意义的顺序显示,更准确地说,是在将它们添加到数据库时,它们一个接一个地堆叠。
我不确定我是否应该对某些东西进行分组,如果可以,什么表和列?
我在每个表的类中都有关系,并尝试在其中放置group子句,但没有成功。
==================== E D I T ================
我忘了说几件事。我目前正在尝试在显示单个条目时使其工作(显示猫,子猫和标签)。
Controller EntryController
public function actionView($id)
{
$entry = $this->loadModel();
$relations = $entry->relations;
$this->render('view', array(
'entry' => $entry,
'relations' => $relations,
));
}
建立与Termrelationship.php主要关系的模型类Entry.php:
public function relations()
{
return array(
'relations' => array(self::HAS_MANY, 'Termrelationship', 'id',),
);
}
view.php。注意:由于它们都是关系(猫,子猫,标签),并且由于来自关系表,因此在该表本身中未设置任何层次结构。我必须比较分类法名称,以便为它们提供不同的标记(并将它们放在另一个块(标签)中)。子猫在这里出现缩进:http://screencast.com/t/CvCBJoQqD0WP只是因为它们被包裹在SMALL标签中。很好,但我还希望能够列出一个主要/父类别,然后列出该类别的所有子类别,然后开始一个新类别,依此类推...
<div class="row">
<div class="col-md-6">
<blockquote>
<?php
foreach($relations as $relation):
if($relation->taxonomy['taxonomy']=='category'):
echo $relation->taxonomy->term->name . ' (Parent: '.$relation->taxonomy['parent'].')';
endif;
if($relation->taxonomy['taxonomy']=='subcategory'):
echo '<small>'.$relation->taxonomy->term->name . ' (Parent: '.$relation->taxonomy['parent'].')</small>';
endif;
endforeach;
?>
</blockquote>
</div>
<div class="col-md-6">
<?php
foreach($relations as $relation):
if($relation->taxonomy['taxonomy']=='tag'):
echo '<span class="label label-default">'.$relation->taxonomy->term->name.'</span> ';
endif;
endforeach;
?>
</div>
</div>
最佳答案
看完relational active records的解释后,您可以在每个模型的order
函数中为关系数据定义正确的relations()
,以及with
定义以自动加载子项。或者,您可以使用->with(array('…'))->find()
操作使手动加载达到自定义程度。
// Entry actionView() Option one, manually setting depth
// should load a single entry with relationships 2 levels deep + parent/current
$entry = Entry::model()->with(array('relations.relations'))->findByPk($id);
// Entry Model, Option two fully specifying the relationship
public function relations()
{
return array(
'relations' => array(self::HAS_MANY, 'Termrelationship', 'id', 'order' => 'entry.name', 'with' => 'relations'),
);
}
顺便说一句。您确定
id
中的relations()
部分是正确的外键引用吗?您甚至可能希望对关系使用through
修饰符来定义有关关系结构的其他信息。关于php - Yii框架+ WP样式(使用WP db表)发布层次结构:我需要订购类别和子类别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19669919/