Как получить массив результатов из Laravel, где условие

Я пытаюсь получить набор результатов из красноречивого запроса laravel, в результате чего я сопоставляю столбец со списком значений в массиве.

$authenticated_operation_ids = AccessControl::where('user_id', '=', $user_id)
->where('entity_type_id', '=', $operation_entity_id)
->pluck('entity_access_id')->toArray();
$authenticated_operations = Operation::whereIn('id', $authenticated_operation_ids);

return view('page.index')->withOperations($authenticated_operations);

0

Решение

Вы можете попробовать это как:

$authenticated_operation_ids = AccessControl::where('user_id', '=', $user_id)->where('entity_type_id', '=', $operation_entity_id)->pluck('entity_access_id')->toArray();
$authenticated_operations = Operation::whereIn('id', $authenticated_operation_ids)->get();
return view('page.index')->withOperations($authenticated_operations);

добавлять get() в конце запроса.

0

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

1) pluck возвращает одно значение из одной строки. Ты хочешь lists чтобы получить один столбец из нескольких строк. toArray может не понадобиться, так как возвращает массив значений

$authenticated_operation_ids = AccessControl::where('user_id', '=', $user_id)
->where('entity_type_id', '=', $operation_entity_id)
->lists('entity_access_id');

2) Вы забываете фактически получить строки во второй строке:

$authenticated_operations = Operation::whereIn('id', $authenticated_operation_ids)
->get();
0

Вы должны вызвать функцию get () для набора результатов, чтобы получить результаты. Модифицированный код будет похож

$authenticated_operation_ids = AccessControl::where('user_id', '=', $user_id)->where('entity_type_id', '=', $operation_entity_id)->get()->pluck('entity_access_id');
$authenticated_operations = Operation::whereIn('id', $authenticated_operation_ids)->get();
return view('page.index')->withOperations($authenticated_operations);

или вы можете использовать курсор для его обработки.

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