2015-10-14 4 views
2

У меня есть следующий красноречивый запрос:Группировка элементов массива с красноречивым

$extras = EventExtra::select('id', 'category', 'name', 'price', 'description', 'company')->get(); 

Он получает некоторые данные от меня из моей базы данных. Что я хочу, чтобы возвращаемые данные будут сгруппированы в два раза, первый по категориям, а затем второй компанией, так что в конце концов у меня есть что-то вроде этого возвращается клиенту:

[ 
    { 
    "name": "donation", 
    "collection": [ 
     { 
      "name": "sampleCompany1", 
      "array": [ 
      { 
       "name": "extra1", 
       "description": "", 
       "value": "" 
      }, 
      { 
       "name": "extra4", 
       "description": "", 
       "value": "" 
      }, 
      { 
       "name": "extra6", 
       "description": "", 
       "value": "" 
      } 
      ] 
     } 
     ] 
    }, 
{ 
    "name": "donation", 
    "collection": [ 
     { 
     "name": "sampleCompany2", 
     "array": [ 
      { 
      "name": "extra2", 
      "description": "", 
      "value": "" 
      }, 
      { 
      "name": "extra3", 
      "description": "", 
      "value": "" 
      } 
     ] 
     } 
    ] 
}] 

Я просто набран выше так что это может быть не допустимый массив объектов, но в основном это показывает, что я хочу сделать здесь.

ответ

1

Вы можете использовать Collection для создания своего пользовательского объекта. Что-то вроде этого:

$return_data = Collect(); 

Для добавления элементов в коллекции с собственностью, вы можете использовать функцию put.

$inner_data->put('name',$extras->name); 

Вы также можете добавить коллекцию в коллекцию. Чтобы просто нажать существующую коллекцию в коллекции, используйте push функция

$inner_data->push($some_collection) 

EDIT: Так как вы хотите рабочий пример, увидеть это ниже:

Допустим, вы хотите создать следующий с помощью коллекции:

{ 
    "name": "extra1" 
    "description": "", 
    "value": "" 
} 

Вы будете делать что-то вроде этого:

$my_collection = Collect(); 
$my_collection->put('name','extra1'); 
$my_collection->put('description',''); 
$my_collection->put('value',''); 

Теперь вы можете добавить эту коллекцию в другую коллекцию, где вам не нужен ключ. Так что давайте говорить теперь выглядит следующим образом:

[ 
    { 
    "name": "extra1" 
    "description": "", 
    "value": "" 
    }, 
    { 
    "name": "extra4" 
    "description": "", 
    "value": "" 
    } 
] 

Вы теперь будете делать:

$my_final_collection = Collect(); 
foreach($my_collections as $my_collection) { 
    $my_final_collection->push($my_collection); // and so on in a loop 
} 
+0

Здравствуйте, спасибо, но я смущен вашим использованием «return_data» первый, затем «inner_data», я могу Также не вижу петли или назначения. – user3718908

+0

Я не даю вам точный код для вашей проблемы. Я дал вам представление об использовании Collection для создания вашего настраиваемого объекта. Это не полный код. – codegeek

+0

Да, я понимаю это, но эта вещь «collection()» для меня нова, я никогда не использовал ее и даже не видел раньше, я проверил документы laravel для документации и образцов, но в этом разделе очень мало информации. Это очень помогло бы мне, если бы я мог видеть рабочий образец из вас, пожалуйста. – user3718908

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