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

标签 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 可以包含不同类型的对象。例如,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,而不进行任何“过滤”。因此,如果您想将 EntriesFavorites 关联(如果 SeriesList == 'favorite'),则不能,至少不能自动关联。您必须使用与上面类似的代码来完成此操作。

关于php - 返回不同模型的对象列表的 JOIN 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27805540/

相关文章:

sql - Select 语句在表之间进行左连接,同时根据右表中的特定值过滤结果?

mysql - 更新 Varchar 字段,使字段内的数字保留 3 位小数

php - ZF2 中的 CORS POST 请求变为 OPTIONS 请求

MYSQL:显示寄存器、关联和重命名

mysql - 在数据库中管理客户

mysql - ${Env.CATALINA_HOME} 在 openshift 中不退出

mysql - SQL - 分组表

php - 多表JOIN返回重复结果,类似facebook的事件墙

php - 选择一个表列数不同的表

php - 构建动态 $_POST 语句