首页 > 解决方案 > 将数据存储为地图而不是数组以用于 embedMany 关系

问题描述

通过在 laravel 中运行这些命令:

$model = new Accommodation();
$model->fill(['name'=>'taghi']);
$model->save();
$model->room_types()->create(['name'=>'room 1','id'=>'room_1']);
$model->room_types()->create(['name'=>'room 2','id'=>'room_2']);

这是 MongoDB 中的结果:

{
    "_id" : ObjectId("5c8fafa4d82c24311f440482"),
        "@attributes": {
          "name": "hotel Esteghlal",
          "address": "tehran"
        },
    "updated_at" : ISODate("2019-03-18T14:48:04.000Z"),
    "created_at" : ISODate("2019-03-18T14:48:04.000Z"),
    "room_types" : [ 
        {
            "name" : "room 1",
            "_id" : ObjectId("5c8fafa4d82c24311f440483"),
        }, 
        {
            "name" : "room 2",
            "_id" : ObjectId("5c8fafa4d82c24311f440484")
        }
    ]
}
it is my expected document in mongo db:
{
    "_id" : ObjectId("5c8fafa4d82c24311f440482"),
        "@attributes": {
          "name": "hotel Esteghlal",
          "address": "tehran"
        },
        "room_types": {
      "room_1":{
        "_id" : ObjectId("5c8fafa4d82c24311f440483",
        "name":"room 1"
      },
      "room_2": {

        "name":"room 2",
        "_id" : ObjectId("5c8fafa4d82c24311f440484")    
          }
        }
}

问题的总结是,是否可以通过 laravel ORM 以使用子文档的自然 id 作为它们的键而不是将它们存储为数组的方式创建一个嵌入式对象?

标签: mongodblaravel

解决方案


推荐阅读