Symfony mongoDB oneToMany

может быть, как-то знает проблему,

Я имею отношение oneToMany, с сохранить / редактировать все окей

    /**
* @MongoDB\ReferenceMany(targetDocument="RmaWorkerCities", cascade={"all"}, mappedBy="rmaWorker", storeAs="id", orphanRemoval=true)
*/
protected $cities;
/**
* @MongoDB\ReferenceOne(targetDocument="RmaWorkers", inversedBy="cities")
*/
protected $rmaWorker;

Но когда я хочу найти записи по городам, я получаю эту ошибку:

Cannot use reference \'cities\' in class \'App\\Document\\RmaWorkers\' for lookup or graphLookup: dbRef references are not supported.

Или это просто не работает

Что я пытался сделать:

 $builder = $this->dm->createAggregationBuilder('App\Document\RmaWorkers');

if (!empty($filters['cityId'])) {
$builder
->lookup('cities')
->alias('cities');$builder->match()->field('cities.cityId')->equals($filters['cityId']);
}

или просто

$builder
->field('cities.cityId')->equals($filters['cityId'])
;

1

Решение

Как гласит ошибка, ‘Ссылки dbRef не поддерживаютсяна стадии поиска.

Обходным решением для вас может быть извлечение objectId из DBRef, который вы затем можете обычно использовать на этапе поиска.

Написано изначально, это работает так:

db.rmaWorker.aggregate([
{
$project: {
cities_fk: {
$map: {
input: {
$map: {
input:"$cities",
in: {
$arrayElemAt: [{$objectToArray: "$$this"}, 1]
},
}
},
in: "$$this.v"}},
}
},
{
$lookup: {
from:"cities",
localField:"cities_fk",
foreignField:"_id",
as:"B"}
])

Просто адаптируйте приведенный выше пример, чтобы использовать его с AggregationBuilder. Вы также можете создать пользовательскую функцию для инкапсуляции различных шагов, чтобы она не загромождала вашу декларацию агрегатора. Что-то вроде :

 $builder = $this->dm->createAggregationBuilder('App\Document\RmaWorkers');

if (!empty($filters['cityId'])) {
$builder
->addFields()
->name('cities_fk')
->mapManyDBRefs()
->lookup('cities_fk')
->alias('cities');$builder->match()->field('cities.cityId')->equals($filters['cityId']);
}
0

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

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

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector