2015-11-26 5 views
-1

Я использую Laravel 5, и я хочу сделать поиск массива. Но проблема в том, что запрос возвращает объект, так что я сделал это типаж его, когда я типаж его в массив еще есть объект в.Поиск объектов PHP Laravel 5

Так что я эту таблицу

FormResponses 
->id 
->form_id 
->metrics_id 

Тогда мой запрос

$responses = FormResponses::where('form_id', '>=', 1)->where('form_id', '<=', 500)->get(); 
$responses = (array) $responses; 

$neededObjects = array_filter(
      $responses, 
      function ($e) { 

       return $e->form_id == 1 && $e->metrics_id == 1; 
      } 
    ); 

Итак, как вы видите, $needObjects моя переменная для отфильтрованного массива. Я делаю это для поиска записи. Вы можете увидеть

return $e->form_id == 1 && $e->metrics_id == 1; 

означает, что я хочу, чтобы найти все записи в массиве, где

form_id = 1 и metrics_id = 1

То есть выход $responses когда НЕ отливать в массив

object(Illuminate\Database\Eloquent\Collection)[3423] 
     protected 'items' => 
     array (size=3072) 
      0 => 
      object(App\Http\Models\FormResponses)[3424] 
       protected 'table' => string 'forms_responses' (length=15) 
       protected 'connection' => null 
       protected 'primaryKey' => string 'id' (length=2) 
       protected 'perPage' => int 15 
       public 'incrementing' => boolean true 
       public 'timestamps' => boolean true 
       protected 'attributes' => 
       array (size=7) 
        ... 
       protected 'original' => 
       array (size=7) 
        ... 
       protected 'relations' => 
       array (size=0) 
        ... 
       protected 'hidden' => 
       array (size=0) 
        ... 
       protected 'visible' => 
       array (size=0) 
        ... 
       protected 'appends' => 
       array (size=0) 
        ... 
       protected 'fillable' => 
       array (size=0) 
        ... 
       protected 'guarded' => 
       array (size=1) 
        ... 
       protected 'dates' => 
       array (size=0) 
        ... 
       protected 'dateFormat' => null 
       protected 'casts' => 
       array (size=0) 
        ... 
       protected 'touches' => 
       array (size=0) 
        ... 
       protected 'observables' => 
       array (size=0) 
        ... 
       protected 'with' => 
       array (size=0) 
        ... 
       protected 'morphClass' => null 
       public 'exists' => boolean true 
       public 'wasRecentlyCreated' => boolean false 

после $responses = (array) $responses;

 array (size=1) 
     '�*�items' => 
     array (size=3072) 
      0 => 
      object(App\Http\Models\FormResponses)[3424] 
       protected 'table' => string 'forms_responses' (length=15) 
       protected 'connection' => null 
       protected 'primaryKey' => string 'id' (length=2) 
       protected 'perPage' => int 15 
       public 'incrementing' => boolean true 
       public 'timestamps' => boolean true 
       protected 'attributes' => 
       array (size=7) 
        ... 
       protected 'original' => 
       array (size=7) 
        ... 
       protected 'relations' => 
       array (size=0) 
        ... 
       protected 'hidden' => 
       array (size=0) 
        ... 
       protected 'visible' => 
       array (size=0) 
        ... 
       protected 'appends' => 
       array (size=0) 
        ... 
       protected 'fillable' => 
       array (size=0) 
        ... 
       protected 'guarded' => 
       array (size=1) 
        ... 
       protected 'dates' => 
       array (size=0) 
        ... 
       protected 'dateFormat' => null 
       protected 'casts' => 
       array (size=0) 
        ... 
       protected 'touches' => 
       array (size=0) 
        ... 
       protected 'observables' => 
       array (size=0) 
        ... 
       protected 'with' => 
       array (size=0) 
        ... 
       protected 'morphClass' => null 
       public 'exists' => boolean true 
       public 'wasRecentlyCreated' => boolean false 
+0

Laravel имеет свой собственный метод, названный как '-> ToArray() '. Поэтому вместо typecasting вы можете просто использовать '$ response-> toArray()' –

ответ

3

Laravel Коллекции имеют toArray() метод:

$responsesArray = $responses->toArray() 

Documentation

+0

Спасибо. Я этого не знал. Что произойдет с этой линией return $ e-> form_id == 1 && $ e-> metrics_id == 1; Coz это должен быть массив. – jackhammer013

+1

@JoeneFloresca предположительно '$ e ['form_id'] == 1 && $ e ['metrics_id'] == 1;' – Steve

+0

@Steve большое вам спасибо! отлично работает – jackhammer013

0

Почему вы пытаетесь выполнить обработку данных? Просто запрос для записей, которые вы хотите:

$responses = FormResponses::where('form_id', '=', 1)->where('metrics_id', '=', 1)->get(); 
+0

Нет, я не могу, потому что у меня есть огромное количество данных для поиска, поэтому создание цикла и выполнение этого запроса каждый раз займет много времени. Это мой первый подход и пересмотреть его. – jackhammer013

+0

Я все еще верю, что SQL - это ответ, возможно, с предложением groupby, но, не зная ваших реальных требований, тогда anser by @ Ján Kyselica должен работать на вас – Steve

+0

Первоначально это моя проблема http://stackoverflow.com/questions/ 33934746/fast-way-to-populate-data-mysql-and-php, то он очень медленный. Это похоже на тот подход, который вы мне сказали, поэтому я меняю его. Я попытаюсь получить все, что мне нужно, а затем сохранить его в массиве и выполнить поиск, и я увижу, будет ли это быстрее. – jackhammer013

Смежные вопросы