JOIN查询返回不同模型的对象列表?

时间:2015-01-06 19:12:05

标签: php mysql sql phalcon

到目前为止,我有这段代码:

$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是不同的模型,它们与不同的表格相连接。

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

1 个答案:

答案 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相关联,而不会有任何“过滤”。因此,如果您希望将EntriesFavorites联系起来SeriesList == 'favorite',则不能,至少自动。你必须使用类似于上面的代码来做到这一点。