繁体   English   中英

将三个表中的关系结果放入一个嵌套数组中

[英]getting relational results from three tables into one nested array


我在谷歌上搜索了我的问题的解决方案,但修女帮助了我。 在这里,我有三个表itemsfeedsimages 每个项目都有一个提要和一个或多个图像。 我有3个功能。 一种是从 items 表中返回记录,第二种是接收 feeds_id (items 表中的外键)然后从 feeds 表中返回记录。 第三个函数是返回所有与items_id相关的图片。

这些功能是:
* 获取数据库中的所有项目:

 function get_items(){
  return  $query = Database::getInstance('db')
        ->table('items')
        ->columns(
            'id',
            'items.rowid',
            'items.feed_id as feed_id',
            'title' )
        ->findAll();
}


* 要从提要表中获取提要数据:

function get_feeds($id){
   return  $query = Database::getInstance('db')
        ->table('feeds')
        ->eq('id',$id)
         ->findAll();
}


* 要从图像表中获取图像数据:

function get_images($id){
   return  $query = Database::getInstance('db')
        ->table('images')
        ->columns('items_id','src as image_url',
            'title as image_title',
            'alt')
        ->eq('items_id',$id)
        ->findAll();
   }

然后我有以下代码来调用这些函数并以json格式显示结果:

  $response['items'] = array();
  $response['feeds'] = array();
  $response['images'] = array();   

  foreach ($items = get_items() as $item) {

      $response['items'][] = array(
            'id' => (int)$item['rowid'],
            'feed_id' => (int)$item['feed_id'],
            'title' => $item['title'],
       );

      foreach ($feeds = get_feeds((int)$item['feed_id']) as $feed) {

         $response['feeds'][] = array(
            'title' => $feed['title'],
            'logo_url' => $feed['logo_url'],
            'site_url' => $feed['site_url'],
          );
        }

       foreach ($images = get_images($item['id']) as $image) {

         $response['images'][] = array(
            'id' => $image['items_id'],
            'url' => $image['image_url'],
            'thumb' =>  $_SERVER['SERVER_NAME'] . /myServer/images/thumbs/'. 'thumb_'.basename($image['image_url']),
             'title' => $image['image_title'],
             'alt' => $image['alt']
                );
            }
        }

        echo json_encode($response, JSON_PRETTY_PRINT);

所以,我的期望是得到 json 输出,如:

"items": [
        {
            "id": ,
            "feed_id": 
            "title":
            "feeds": [
                      {
                       "title": ,
                       "logo_url": ,
                       "site_url": "
                      }
                    ]
             "images": [
                         {
                          "id": ,
                          "url": ",
                          "thumb": 
                          "title": "",
                          "alt": ""
                         },
                         {
                          ....
                          }
                        ] 
        }]

我的意思是每个项目数组都应该包含来自 get_feeds 和 get_images 函数的相关数据的嵌套数组。 取而代之的是,我得到如下回复:

//here i select two items from my db
    "items": [
                { //first_item
                    "id": ,
                    "feed_id": 
                    "title":
                 },
                 { //second_item
                    "id": ,
                    "feed_id": 
                    "title":
                 }
              ],
       "feeds": [
                   { // feed data for first item
                     "title": ,
                      "logo_url": ,
                      "site_url": "
                   },
                   { // feed data for second item
                     "title": ,
                      "logo_url": ,
                      "site_url": "
                   }
               ],
                     "images": [
                                 { // image data for first item
                                  "id": ,
                                  "url": ",
                                  "thumb": 
                                  "title": "",
                                  "alt": ""
                                 },
                                 { // other images data 
                                  ....
                                  }
                                ] 
                }]

如您所见,我在没有保持项目、提要和图像之间的关系的情况下获得输出,所有这些都是独立显示的。

我的查询很好,但我怀疑我的foreach语句中有错误。

我可以通过在一个查询中加入这些树表来解决这个问题,但我不想这样做,因为我需要进行验证和其他操作来输出来自每个表。 我感谢您的帮助

我找到了解决方案。 这很容易:)

它就像:

 $response['items'][] = array(
            'id' => (int)$item['rowid'],
            'feed_id' => (int)$item['feed_id'],
            'title' => $item['title'],
            'feeds' => array(
             )
          'images' => array(
          )
   );

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM