到目前为止我有这段代码:
$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 可以包含不同类型的对象。例如,SeriesList“Favorites”可能包含 3 个节目和 4 本书,Show 和 Book 是不同的模型,与单独的表交互。
我是否必须继续加入列表中可能包含的所有型号?或者有更好的办法吗?
最佳答案
查询生成器将返回一个结果集,该结果集可以是模型本身或组合模型(如果您正在进行联接等)。它不会返回其他模型的对象。
您可以使用 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'
),则不能,至少不能自动关联。您必须使用与上面类似的代码来完成此操作。
关于php - 返回不同模型的对象列表的 JOIN 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27805540/