Laravel - вытащить несколько столбцов - PullRequest
0 голосов
/ 19 апреля 2020

Мне нужно вынуть два столбца name и score из моей таблицы corporate_objectives и поместить их в мой график. У меня два разных поведения, и я не могу получить желаемый результат.

1-й код

$getNameAndScore = CorporateObjective::pluck('name');

foreach($getNameAndScore as $key => $item) {
  $corporateObjective[] = [$item, '('.$key.'%)'];
}

Результат:

    "xAxis": [
    [
      "PEOPLE DEVELOPMENT",
      "(0%)"
    ],
    [
      "OPTIMUM SYSTEMS AND PROCESSES",
      "(1%)"
    ],
    [
      "CUSTOMER MANAGEMENT",
      "(2%)"
    ],
    [
      "REVENUE GROWTH",
      "(3%)"
    ]
  ],

2-й код

$getNameAndScore = CorporateObjective::pluck('name', 'score');

foreach($getNameAndScore as $key => $item) {
  $corporateObjective[] = [$item, '('.$key.'%)'];
}

Результат:

  "xAxis": [
    [
      "REVENUE GROWTH",
      "(25%)"
    ]
  ],

Я получаю все правильно name но неверный score в моем первом коде. На моем втором коде я получаю правильные name и score, но не все данные извлекаются. Я хотел получить первый код со всеми правильными score из второго кода.

РЕДАКТИРОВАТЬ: Вот так выглядит моя база данных

id | name                          | score
1    PEOPLE DEVELOPMENT              25
2    OPTIMUM SYSTEMS AND PROCESSES   25
3    CUSTOMER MANAGEMENT             25
4    REVENUE GROWTH                  25

Есть ли другой способ, кроме pluck? Кажется, что pluck объединяет / фильтрует все данные с одинаковым значением.

Ответы [ 2 ]

1 голос
/ 19 апреля 2020

Это правильный вывод вашего кода. Здесь нет проблем

$getNameAndScore = CorporateObjective::pluck('name', 'score');

foreach($getNameAndScore as $key => $item) {
    $corporateObjective[] = [$item, '('.$key.'%)'];
}

Как это работает pluck Вот описание

Если дублирующиеся ключи существуют, последний соответствующий элемент будет вставлен в собранную коллекцию:

$collection = collect([
    ['brand' => 'Tesla',  'color' => 'red'],
    ['brand' => 'Pagani', 'color' => 'white'],
    ['brand' => 'Tesla',  'color' => 'black'],
    ['brand' => 'Pagani', 'color' => 'orange'],
]);

$plucked = $collection->pluck('color', 'brand');

$plucked->all();

// ['Tesla' => 'black', 'Pagani' => 'orange']

Подробности здесь

0 голосов
/ 19 апреля 2020

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

$getNameAndScore = CorporateObjective::pluck('name');

foreach($getNameAndScore as $item) {
  $key = CorporateObjective::where('name', $item)->value('score');
  $corporateObjective[] = [$item, '('.$key.'%)'];
}
return response()->json([
  'xAxis' => $corporateObjective,
]);

Результат

 "xAxis": [
    [
      "PEOPLE DEVELOPMENT",
      "(25%)"
    ],
    [
      "OPTIMUM SYSTEMS AND PROCESSES",
      "(1%)" // I changed the value in the database and it works
    ],
    [
      "CUSTOMER MANAGEMENT",
      "(22%)" // I changed the value in the database and it works
    ],
    [
      "REVENUE GROWTH",
      "(25%)"
    ]
  ],
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...