我已经谷歌搜索解决我的问题,但尼姑帮助了我。
这里我有三个表items
,feeds
和images
。每个项目都有一个Feed和一个或多个图片。
我有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();
}
*从Feed表中获取Feed数据:
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();
}
然后我有以下代码来调用这些函数并在jsonformat中显示结果:
$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
....
}
]
}]
如您所见,我在不保持项目,Feed和图像之间关系的情况下获得输出,所有这些都是独立显示的。
我的查询很好,但我怀疑foreach
语句中的错误。
我可以通过在一个查询中加入这些树表来解决这个问题,但我不想这样做,因为我需要进行验证,其他操作来自每个表的输出。 我感谢你的帮助
答案 0 :(得分:0)
我找到了解决方案。这很容易:)
就像:
$response['items'][] = array(
'id' => (int)$item['rowid'],
'feed_id' => (int)$item['feed_id'],
'title' => $item['title'],
'feeds' => array(
)
'images' => array(
)
);