2016-11-03 6 views
0

Ich versuche, eine Ergebnismenge aus einer Laravel eloquenten Abfrage zu erhalten, wobei ich eine Spalte mit einer Liste von Werten in einem Array abgleiche.Wie bekomme ich eine Array-Ergebnismenge von Laravel? Bedingung

$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

Sie vergessen '-> get()' am Ende Ihrer Abfragen. – aynber

+0

In mongodb werden native IDs als _id-Eigenschaft erstellt. Sie sollten ID zu _id ändern, wenn Sie es nicht so absichtlich gemacht haben. – zarax

Antwort

0

können Sie versuchen, es so:

$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); 

hinzufügen get() am Ende der Abfrage.

0

1) pluck gibt einen einzelnen Wert aus einer einzelnen Zeile zurück. Sie möchten lists eine einzelne Spalte aus mehreren Zeilen abrufen. toArray nicht benötigt werden, da es eine Reihe von Werten gibt

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

2) Sie vergessen die Zeilen in Ihrer zweiten Zeile tatsächlich abzurufen:

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

In Laravel 5.2 wurde die Methode 'lists' für die Objekte Collection, Query Builder und Eloquent query builder in' pluck' umbenannt. [Docs] (https://laravel.com/docs/5.3/upgrade#upgrade-5.2.0) –

+0

Ah ha, danke! Das macht # 1 dann strittig. Zumindest, wenn sie 5.2 benutzen. Keine Version wurde erwähnt. – aynber

0

Sie haben bekommen() aufrufen Funktion auf der Ergebnismenge, um Ergebnisse zu erhalten. Der modifizierte Code ist wie folgt:

$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); 

oder Sie können einen Cursor verwenden, um es zu verarbeiten.

Verwandte Themen