Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 返回不同模型的对象列表的联接查询?_Php_Mysql_Sql_Phalcon - Fatal编程技术网

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、一本书还是我稍后添加的另一个系列类。