Laravel: Как получить ключ от коллекции? - PullRequest
0 голосов
/ 14 октября 2018

У меня есть эта таблица свойств

+------------+------------------+------+-----+---------+----------------+
| Field      | Type             | Null | Key | Default | Extra          |
+------------+------------------+------+-----+---------+----------------+
| id         | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| user_id    | int(11)          | NO   |     | NULL    |                |
| meta_name  | varchar(255)     | NO   |     | NULL    |                |
| meta_value | text             | NO   |     | NULL    |                |
| meta_group | varchar(255)     | NO   |     | NULL    |                |
| created_at | timestamp        | YES  |     | NULL    |                |
| updated_at | timestamp        | YES  |     | NULL    |                |
+------------+------------------+------+-----+---------+----------------+

Я извлекаю все значения и группирую их по meta_group

Контроллер

 public function properties()
 {
   $properties = Properties::all()->groupBy('meta_group');
   return view('dashboard.properties.index')->with('properties', $properties);
 }

$properties содержит:

=> Illuminate\Database\Eloquent\Collection {#2953
     all: [
       "points" => Illuminate\Database\Eloquent\Collection {#2955
         all: [
           App\Properties {#2964
             id: 1,
             user_id: 3,
             meta_name: "point_interval",
             meta_value: "1",
             meta_group: "points",
             created_at: null,
             updated_at: null,
           },
           App\Properties {#2963
             id: 2,
             user_id: 3,
             meta_name: "point_amount",
             meta_value: "1",
             meta_group: "points",
             created_at: null,
             updated_at: null,
           },
         ],
       },
       "message" => Illuminate\Database\Eloquent\Collection {#2949
         all: [
           App\Properties {#2965
             id: 3,
             user_id: 3,
             meta_name: "message_length",
             meta_value: "10",
             meta_group: "message",
             created_at: null,
             updated_at: null,
           },
           App\Properties {#2966
             id: 4,
             user_id: 3,
             meta_name: "message_score",
             meta_value: "90",
             meta_group: "message",
             created_at: null,
             updated_at: null,
           },
         ],
       },
     ],
   }

В блейде я делаю это

@foreach($properties as $group=>$property)
  {{$group}} 
@endforeach

Который выдает points, затем messages, как я ожидал.

Затем я хочу вывестиимя ключа и значение, например meta_name:message_score

Но когда я делаю

@foreach($property as $key=>$prop)
  {{$prop}}
@endforeach

$prop выводит 2 объекта

{
    "id": 1,
    "user_id": 3,
    "meta_name": "point_interval",
    "meta_value": "1",
    "meta_group": "points",
    "created_at": null,
    "updated_at": null
} {
    "id": 2,
    "user_id": 3,
    "meta_name": "point_amount",
    "meta_value": "1",
    "meta_group": "points",
    "created_at": null,
    "updated_at": null
}

Итак, я пытаюсь получить каждыйимя ключа

@foreach($prop as $ke => $pr)
  {{$ke}}
@endforeach

Но это выводит

incrementing exists wasRecentlyCreated timestamps incrementing exists wasRecentlyCreated timestamps

и {{$pr}} выводит 1 1 1 1 1 1

Я не могу идти дальше вниз с foreach()как он выдает ошибку.

Как напечатать имя и значение ключа?

1 Ответ

0 голосов
/ 14 октября 2018

Я понял это.

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

$properties = Properties::all()->groupBy('meta_group')->toArray();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...