我遇到了将两个查询的结果合并到一个json对象中的问题。
$item_results = ItemQuery::create('item')
->filterByCategory($categoryObjects, Criteria::IN)
->groupBy('item.ID')
->find();
返回类似
的对象{"ID":35,"Title":"Individual Asset","Description":"Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.","DateRecorded":"01\/02\/01"}
然后我想重新附上类别,以便我运行
foreach($item_results as $item_result) {
$categories = ItemCategoryQuery::create()
->filterByItem($item_result)
->find();
$item_result->categories = Array();
$item_result->categories = $categories->toArray();
echo json_encode($item_result->toArray());
}
但是我把它拿回来没有类别仍然......同样的json。所以我跑了
var_dump($item_result);
然后回来了
object(Item)#39 (18) {
["id":protected]=>
int(35)
["title":protected]=>
string(16) "Individual Asset"
["description":protected]=>
string(124) "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua."
["date_recorded":protected]=>
string(10) "2001-01-02"
...
["categories"]=>
array(2) {
[0]=>
array(2) {
["ItemID"]=>
int(35)
["CategoryID"]=>
int(19)
}
[1]=>
array(2) {
["ItemID"]=>
int(35)
["CategoryID"]=>
int(15)
}
}
所以类别在新对象中它只是没有用它序列化...任何想法?
答案 0 :(得分:1)
toArray()是Propel生成的方法,它将对象的所有受保护值都转换为数组。 它从模型 - 模式中获取数组的键。
如果要生成包含不存在字段的数组,可以手动将此值分配给数组
$result = $item_result->toArray();
$result['categories'] = $categories->toArray()
或重写toArray方法
答案 1 :(得分:0)
我知道这是一个非常古老的问题,但是我通过谷歌搜索发现它我认为写一个答案可能是值得的。
正如已经建议的那样,Propel会在它生成的每个模型上公开toArray方法,但该方法只会处理模式定义中定义的属性或集合(下一步更多)。
您尝试实现的是模型实例(来自ItemQuery :: find方法结果数组的元素)的序列化以及相关的类别集合。
Propel将基于关系的查询的结果存储到一个集合中,该集合是已进行查询的实例的受保护属性。 如果已从数据库加载某个关系的集合,则将包含在toArray方法结果中。
在Propel模型中,关系的填充/检索方法以get + related_model_name_pluralized
的形式生成(如果关系为1:N)。
我认为一个例子可能比言语更有帮助。
foreach($item_results as $item_result) {
$item_result->getItemCategories(); //This is the method that will
//populate the collection.
//Now the collection is populated so we can json_encode
echo json_encode($item_result->toArray());
}