到目前为止,我有这段代码:
$list = $this->modelsManager
->createBuilder()
->columns(array("SeriesList.*", "User.*", "Entry.*"))
->from("SeriesList")
->join("User")
->join("Entry")
->andWhere("SeriesList.id = '$id'")
->getQuery()
->execute();
“Entry”数据库中的每一行都是一个项目,它具有id,它所属的系列列表的id,它的系列ID,以及它是什么类型的系列。系列类型指定可以在其中找到系列ID的表。
问题在于我希望SeriesList(s)可能包含不同类型的对象。例如,SeriesList“Favorites”可能包含3个节目和4本书,Show和Book是不同的模型,它们与不同的表格相连接。
我是否必须继续加入列表可能包含的所有模型?或者有更好的方法吗?
答案 0 :(得分:0)
查询构建器将返回一个结果集,该结果集可以是模型本身或组合模型(如果您正在进行连接等)。它不会返回其他模型的对象。
您可以使用getRelated()
函数访问基本模型本身的关系。
因此,如果您的起点为Entry
,那么您可以执行以下操作:
$entries = Entries::find();
foreach ($entries as $entry) {
// If series type is X
if ($entry->seriesType == 'x') {
$newItem = $entry->getRelated('x');
} else if ($entry->seriesType == 'y') {
$newItem = $entry->getRelated('y');
}
}
您可以在模型中定义将满足该关系的关系。这里的关键是Phalcon的关系会将表A中的数据直接与表B相关联,而不会有任何“过滤”。因此,如果您希望将Entries
与Favorites
联系起来SeriesList == 'favorite'
,则不能,至少自动。你必须使用类似于上面的代码来做到这一点。