2015-05-31 4 views
1

У меня есть модель Новости с embedsMany модели Comment и в модели комментарий У меня embedsMany модель ОтветитьLaravel MongoDB поместить его объект поместить его объект

когда я делаю это:

$new = News::create(["title"=>"Simple new", "body"=>"this is a simple news"]); 
$comment = $new->comments()->create(["subject"=>"comment 1", "body"=>"my comment"]); 

Вставить ОК и данные в БД:

{ 
    "title" : "Simple new", 
    "body" : "this is a simple news", 
    "_id" : ObjectId("5569b157bed33066220041ac"), 
    "comments" : [ 
    { 
     "subject" : "comment 1", 
     "body" : "my comment", 
     "_id" : ObjectId("5569cc28bed330693eb7acd9") 
    } 
    ] 
} 

но когда я делаю это:

$reply = $comment->replies()->create(["subject"=>"reply to comment 1", "body"=>"my reply"]); 

БД:

{ 
    "title" : "Simple new", 
    "body" : "this is a simple news", 
    "_id" : ObjectId("5569b157bed33066220041ac"), 
    "comments" : [ 
    { 
     "subject" : "comment 1", 
     "body" : "my comment", 
     "_id" : ObjectId("5569cc28bed330693eb7acd9"), 
     "replies" : { 
      "0" : { 
       "subject" : "reply to comment 1", 
       "body" : "my reply", 
       "_id" : ObjectId("5569cc33bed330693eb7acda" 
      } 
     } 
    } 
    ] 
} 

и удалить ответ не работает

+0

А что если вы _force_ создания массива при вставке комментария: '$ комментарий = $ New-> комментарии() -> создать ([» subject "=>" comment 1 "," body "=>" my comment "," replies "=> []]);'? –

+0

@SylvainLeroux, которые сохраняют ok, но в этой форме я не могу использовать функции библиотеки # jenssegers-mongodb, поэтому метод удаления все равно не работает –

+0

Не могли бы вы объяснить, что «метод удаления все еще не работает» _: есть ли какое-то сообщение об ошибке ? Или ответ просто не удаляется? Возможно, данные по-прежнему не сохранены в правильном формате? Я не знаю Laravel, поэтому я не могу вам помочь, но, может быть, стоит показать нам, что вы пытались удалить ответ? На данный момент трудно сказать (по крайней мере, для меня), если у вас есть проблема, когда вы вставляете свои данные или когда вы их делите ... –

ответ

2

Решение 1:

В jenssegers/Laravel-MongoDB рамки вы можете использовать нажимной или обновления метода для вставки документы в массив. Примечание: метод push не существует в более ранних версиях.

Решение 2: (рекомендуется)

Использование схемы базовой основы для MongoDB (то есть NoSQL, схема менее базы данных) является неправильным и использование официальной структуры MongoDB для PHP рекомендуется:

http://docs.mongodb.org/ecosystem/drivers/php

Для ускорения запросов вы можете использовать индексирование.

В этом решении вы можете использовать эту структуру данных:

{ 

    "_id" : ObjectId("5577d8a419e5eae7ae17a058"), 

    "name" : "My New", 

    "comments" : { 

     "5577d8c419e5eae7ae17a059": { 

     "subject" : "My Comment", 

     "body" : "BODY", 

     "replies" : { 

      "5577d91619e5eae7ae17a05b": { 

      "subject" : "My Reply", 

      "body" : "BODY" 

      } 

     } 

    } 

}