извлечение данных из двух таблиц в многомерный массив api json response

0

Я изучаю разработку Api, где я хочу получать данные из двух таблиц

Первая таблица (элементы) содержит:

id, feed_id, title, author, content

Вторая таблица (каналы):

feed_id,title,url

Я хочу получить ответ Json вроде:

 {
      - stories :
            [
               id
               feed_id {
                          title,
                          url
                       }
               title
               author
            ]
}

Моя функция PHP для извлечения истории, предвзятой по id, выглядит так:

$app->get('/stories/:id', 'authenticate', function($story_id) { 
    $response = array();
    $result = Database::get('db')->table('items')
    ->eq('rowid', $story_id)
    ->findOne();
    //$response["error"] = false;
    if ($result != NULL) {
    $response['stories'] = array(
        'id' => $result["id"],
        'feed_id' => $result["feed_id"],
        'title' =>  $result["title"],
        'isBreaking' => $result['isBreaking'],
        'author' => $result['author'],
        'updated' => $result["updated"],
        'url' => $result['url'],
        'content' => $result["content"]);
         echoRespnse(200, $response);
    }
    else {
        $response["error"] = true;
        $response["message"] = "The requested resource doesn't exists";
        echoRespnse(404, $response);
    } 
});

В результате я получаю следующее:

 {
   - "stories": [
             {
                id
                feed_id
                title
                url
             }
           ]
}

Как я могу получить данные со второго планшета (каналы), смещенного на feed_id, и получить данные в подвале?

  • 0
    Вы упомянули две истории имен таблиц и каналов, но в вашем коде все, что я вижу, это одно имя таблицы, например элементы . Каков ваш запрос для получения данных из БД?
  • 0
    Извините .. первое имя таблицы это элементы, а не истории ... я исправил это
Показать ещё 1 комментарий
Теги:
multidimensional-array

1 ответ

1
Лучший ответ

как @MikeBrant упомянул, что вам нужно использовать join между двумя таблицами для получения правильных данных. простой запрос будет примерно таким:

select items.id, items.title, items.author, items.content, feeds., feeds.title as feed_title, feeds.url from items left join feeds on items.feed_id = feeds.feed_id

а затем измените свой $response['stories'] следующим образом:

$response['stories'] = array(
'id' => $result["id"],
'feed_id' => array(
  'title' => $result["feed_title"],
  'url' => $result["url"]
),
'title' =>  $result["title"],
.
.
.
);

вы получаете идею :)

  • 0
    Отлично ... отлично работает, спасибо большое

Ещё вопросы

Сообщество Overcoder
Наверх
Меню