JOIN查询那个returns不同型号的对象列表?

JOIN query that returns list of objects of different models?

到目前为止我有这个代码:

$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,以及它是什么类型的系列。系列的类型指定了table 可以在其中找到系列 ID。

问题是我希望 SeriesList(s) 可以包含不同类型的对象。例如,SeriesList "Favorites" 可能包含 3 个节目和 4 本书,Show 和 Book 是不同的模型,它们与单独的 table 接口。

我是否必须继续加入列表可能包含的所有模型?或者有更好的方法吗?

查询构建器将 return 一个结果集,它可以是一个模型本身或一个组合模型(如果您正在进行连接等)。它不会 return 其他模型的对象。

您可以使用 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 的关系将直接关联从 table A 到 table B 的数据,而没有任何 "filtering"。因此,如果你想将 EntriesFavorites 相关联,如果 SeriesList == 'favorite' 你不能,至少是自动的。您将必须使用类似于上述代码的代码来执行此操作。