MongoDB Eloquent Models: как предотвратить перезапись запросов, нацеленных на «id», на целевые «_id»?Php

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 MongoDB Eloquent Models: как предотвратить перезапись запросов, нацеленных на «id», на целевые «_id»?

Сообщение Anonymous »

В настоящее время я работаю с экземпляром MongoDB, куда в процессе миграции было импортировано множество документов JSON. Документы JSON содержат поле id, которое (сюрприз!) является первичным ключом источника миграции. Конечно, ключ, используемый MongoDB, — это _id.
Теперь я создаю приложение Laravel поверх указанного MongoDB, для которого я использую официальный драйвер MongoDB/реализацию Eloquent для уровня ORM.
Оказывается, получить документы, запросив идентификатор с использованием модели классов, поскольку в бесчисленных местах базовой реализации Builder ссылки на идентификатор столбца преобразуются в _id.

Например, рассмотрим эти строки из MongoDB\Laravel\Query\Builder::compileWheres():

Код: Выделить всё

// Compatibility with Eloquent queries that uses "id" instead of MongoDB's _id
if ($where['column'] === 'id') {
$where['column'] = '_id';
}
Это приводит к тому, что запрос для id = 10000 отображается следующим образом:

Код: Выделить всё

> MyModel::where('id', 10000)->toMql()
= [
"find" => [
[
"_id" => 10000,
],
[
"typeMap" => [
"root" => "object",
"document" => "array",
],
],
],
]
Насколько я вижу, это влияет на все методы, предоставляемые классом Model, которые можно использовать для извлечения моделей/документов. По какой-то причине они не сделали это поведение необязательным.
Я знаю, что, вероятно, можно было бы переименовать или продублировать поля id в качестве обходного пути, но почему-то я думаю, что это так. должен быть какой-то другой способ.
Сталкивались ли вы случайно с этой проблемой и нашли работоспособное решение, которое не требует написания запросов вручную или разветвления пакета (=D )?

Подробнее здесь: https://stackoverflow.com/questions/792 ... ewritten-t
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»