Php 返回不同模型的对象列表的联接查询?
到目前为止,我有以下代码:Php 返回不同模型的对象列表的联接查询?,php,mysql,sql,phalcon,Php,Mysql,Sql,Phalcon,到目前为止,我有以下代码: $list = $this->modelsManager ->createBuilder() ->columns(array("SeriesList.*", "User.*", "Entry.*")) ->from("SeriesList") ->join("User") ->join("Entry")
$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
问题是我希望序列列表可能包含不同类型的对象。例如,系列列表“收藏夹”可能包含3个节目和4本书,节目和书是与单独表格交互的不同型号
对于列表中可能包含的所有型号,我是否必须继续加入?或者有更好的方法吗?查询生成器将返回一个结果集,该结果集可以是模型本身,也可以是组合模型(如果您正在执行联接等操作)。它不会返回其他模型的对象 您可以使用
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中的数据关联起来,而不进行任何“过滤”。因此,如果您想将
条目
关联到收藏夹
如果系列列表=='favorite'
,您至少不能自动关联。您必须使用与上述代码类似的代码来执行此操作。它所属的系列列表的id与其系列id有何不同@草莓系列列表是一个模型。每个系列列表都有一个名称和一个id,在您的问题中,该id被称为前者。series id是一个slug(我可以使用一个整数,但我决定将主键id和slug的用途结合起来,以使事情更简单),它是其系列的唯一主键,无论是一个Show、一本书还是我稍后添加的另一个系列类。