2016-10-20 4 views
3

я следующий код:Запрашивания коллекции с массивом Mongoid

// company_ids is an array of mongo IDs 
// company_id is an array (with only 1 element) of mongo ID 
foreach($company_ids as $company_id){ 
    $results = Archive::where("billing.company._id", 'all', array($company_id))->get(); 
    ... 

Вот выход Log::info(print_r($company_ids, true))

[2016-10-22 02:41:27] production.INFO: Array 
(
    [0] => 57515764b91a8c4d008b45d1 
    [1] => 57515764b91a8c4d008b45d6 
    [2] => 57515764b91a8c4d008b45db 
    [3] => 57515764b91a8c4d008b45e0 
    ... 
) 

Как я могу запросить Archive коллекции непосредственно с помощью company_ids и удаления нужна ли петля foreach?

+0

вы пробовали только $ = результаты Архив :: где ("billing.company._id", 'все', $ company_ids) -> получить(); – Eric

+0

Да, я пробовал это, но результат пуст. – Edwin

+0

try возможно $ results = Archive :: where ("billing.company._id", 'all', json_decode ('{"$ in":' + json_decode ($ company_ids) + '}') -> get(); – Eric

ответ

1

небольшое обновление в @Robbie ответ. Не нужно использовать массив из MongoIds, просто используйте массив строк, и он будет работать. Я использую это только с Laravel-jenessengers

$company_ids = [ 
    '57515764b91a8c4d008b45d1', 
    '57515764b91a8c4d008b45d6', 
    '57515764b91a8c4d008b45db', 
    '57515764b91a8c4d008b45e0' 
] 

$results = Archive::whereIn('billing.company._id', $company_ids)->get(); 
0

Согласно readme для библиотеки:

$results = Archive::whereIn('billing.company._id', $company_ids)->get(); 

(я не совсем уверен, что массив $ company_ids, но я предполагаю, что это должно быть и массив Mongoid: но это также зависит от лежащие в основе библиотеки вы используете, Mongo или MongoDB, поскольку оба поддерживаются библиотекой)

$company_ids = [ 
    new mongoID('57515764b91a8c4d008b45d1'), 
    new mongoID('57515764b91a8c4d008b45d6'), 
    new mongoID('57515764b91a8c4d008b45db'), 
    new mongoID('57515764b91a8c4d008b45e0'), 
] 
+0

Пробовал это, но он не работает, $ results empty. аналогичный запрос, который не сравнивает поддокумент, будет работать. – Edwin

+0

Собственно, просто перечитав вашу структуру, 'bill ing.company._id' похоже, что это не MongoID, а ваш личный идентификатор? Если это так, просто передайте массив, если идентификаторы в виде строк. Используйте только новый 'MongoID()', если вы ищете столбец MongoID ('_id'). – Robbie