dongzhanlian6289 2015-01-06 19:12
浏览 26
已采纳

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

So far I have this code:

$list = $this->modelsManager
             ->createBuilder()
             ->columns(array("SeriesList.*", "User.*", "Entry.*"))
             ->from("SeriesList")
             ->join("User")
             ->join("Entry")
             ->andWhere("SeriesList.id = '$id'")
             ->getQuery()
             ->execute();

Each row in the "Entry" database is an item that has a id, id of the series list it belongs to, its series id, and what type of series it is. The type of series specifies what table the series id can be found in.

The problem is that I want SeriesList(s) to may contain different types of objects. For example, the SeriesList "Favorites" may contain 3 shows and 4 books, Show and Book being different models which interface with separate tables.

Would I have to keep joining for all the models the list might contain? Or is there a better way?

  • 写回答

1条回答 默认 最新

  • dongqing6661 2015-01-07 13:38
    关注

    The query builder will return a resultset which could be a model itself or a combined model (if you are doing joins etc.). It will not return objects of other models.

    What you can do is use the getRelated() function to access the relationships from the base model itself.

    So if your starting point is Entry then you could do something like this:

    $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');
        }
    }
    

    You can define relationships in your models that will cater for that. The key here is that Phalcon's relationships will relate data from table A to table B straight up and without any "filtering". So if you want to relate Entries to Favorites if SeriesList == 'favorite' you cannot, at least automatically. You will have to do that with code similar to the one above.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥15 可见光定位matlab仿真