БД содержит документы JSON, импортированные из внешнего сервиса.
Все они имеют поле с именем id, который (сюрприз!) является первичным ключом источника. Ключ, используемый MongoDB, конечно, — это _id.
Оказывается, почти невозможно получить документы, запросив поле id с помощью классы модели, поскольку в бесчисленных местах базовой реализации 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';
}
Код: Выделить всё
> MyModel::where('id', 10000)->toMql()
= [
"find" => [
[
"_id" => 10000,
],
[
"typeMap" => [
"root" => "object",
"document" => "array",
],
],
],
]
Я знаю, что, вероятно, можно было бы переименовать или продублировать поля id в качестве обходного пути, но почему-то я думаю, что это так. должен быть какой-то другой способ.
Сталкивались ли вы случайно с этой проблемой и нашли работоспособное решение, которое не требует написания запросов вручную или разветвления пакета (=D )?
Подробнее здесь: https://stackoverflow.com/questions/792 ... ewritten-t
Мобильная версия