Как получить массив всех столбцов результата построителя запросов в Laravel? - PullRequest
0 голосов
/ 18 января 2019

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

\DB::getSchemaBuilder()->getColumnListing(\DB::table('product_list')
    ->join('product_categories', 'product_list.product_category', '=', 'product_categories.id')
    ->join('product_types', 'product_list.product_type', '=', 'product_types.id')
    ->where('product_list.id', $this->id)
    ->orderBy('product_list.id', 'DESC')
    ->get()
);

Однако, это дает мне вывод []. Если я запускаю команду, не инкапсулируя ее с \DB::getSchemaBuilder()->getColumnListing(), я получаю это:

Collection {#652 ▼
  #items: array:1 [▼
    0 => {#650 ▼
      +"id": 3
      +"cost": "150.00"
      +"product_category": 1
      +"product_type": 3
      +"product_score": 0
      +"created_at": "2019-01-16 16:34:29"
      +"updated_at": "2019-01-16 16:34:29"
      +"rating": 0
      +"down_payment": "10.00"
      +"title": "Static"
      +"price_start": "50.00"
      +"price_stop": "150.00"
      +"theme": "Custom"
      +"pages": 4
      +"rbac": 0
      +"portal": 0
      +"external_software": 0
      +"company_supplier": "Iezon Solutions"
    }
  ]
}

Как я могу получить массив всех столбцов?

Ответы [ 2 ]

0 голосов
/ 18 января 2019

Если вам просто нужны динамически создаваемые имена столбцов таблицы, быстрое решение:

array_keys(get_object_vars($collection->first())); // will output ['id', 'cost', 'product_category', ...]
0 голосов
/ 18 января 2019

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

Я решил преобразовать его toArray(), использовать первый индекс [0] и привести его к массиву. Это позволяет мне использовать array_keys() для поиска имен столбцов.

array_keys((array) \DB::table('product_list')->join('product_categories', 'product_list.product_category', '=', 'product_categories.id')
            ->join('product_types', 'product_list.product_type', '=', 'product_types.id')
            ->where('product_list.id', $this->id)
            ->orderBy('product_list.id', 'DESC')->get()->toArray()[0])
...