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"}
}
}
]
}

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

1

Решение

Решение 1:

В фреймворке jenssegers / laravel-mongodb вы можете использовать метод push или update для вставки документов в массив. Примечание: метод 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"
}

}

}

}
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]