【问题标题】:ORM: List of related itemsORM:相关项目列表
【发布时间】:2018-08-29 06:25:56
【问题描述】:

我尝试使用 ORM 查找省份及其城市的列表。

结果与此列表相同:

"provinces": [
    {
        "name": "Prov.1",
        "Cities": {
            "name": "City.1"
        }
    },
    {
        "name": "Prov.1",
        "Cities": {
            "name": "City.2"
        }
    },
]

预期:

"provinces": [
    {
        "name": "Prov.1",
        "Cities": [
            {
                "name": "City.1"
            },
            {
                "name": "City.2"
            }
        ]
    },
]

使用 ORM:

Provinces::find('all', [
    'with' => ['Cities']
]);

【问题讨论】:

  • 您将需要使用您喜欢的任何循环来遍历此结果以形成您期望的数组。 ORM 肯定不会为您提供这样的结果。
  • @Rafael - 除了do{ }while(); 循环之外的任何一个循环。为什么是 JSON?
  • @ArtisticPhoenix 它已被转换。 $model->to('json')
  • 我通常认为do{ } while(); 是战争罪,@ArtisticPhoenix :)
  • 它有一些很好的小众用途,你可以用它来控制块之外的break,如果你这样做do{ }while(false),它会循环一次并让你使用break,然后我还没有找到它的用途。

标签: php lithium


【解决方案1】:

类似

$array = [];
foreach($provinces as $province){
    $key = $province['name'];
    if(!isset($array[$key])){
       $array[$key] = [
         'name' => $province['name'], 
         'Cities' => [
              [ 'name' => $province['Cities']['name']];
          ]
       ];
    }else{
       $array[$key]['Cities'][] = ['name' => $province['Cities']['name']];
    }
}

 //strip keys
$array = array_values($array);

因为您没有发布实际的 PHP 数组,所以我只是在猜测它应该是什么。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-23
    • 2015-06-22
    • 2015-10-10
    • 2016-08-24
    • 1970-01-01
    • 2017-03-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多