Необходимо создать коллекцию ключей с несколькими значениями (Laravel 7.x) - PullRequest
0 голосов
/ 26 мая 2020

Мой первый пост здесь. Я попытался найти ответ, но безуспешно, поэтому здесь мы go

Как правило, я не могу поделиться с вами точным кодом, над которым я работаю :( так вот пример:

$collection = collect(['country' => 'Germany', 'city' => 'Berlin', 'month' => 'April']);
dd($collection);
//"country" => "Germany"
//"city" => "Berlin"
//"month" => "April"
$array1 = ['France', 'Paris', 'May'];
$array2 = ['Spain', 'Madrid', 'June'];

Мой вопрос - как «добавить» эти массивы (учитывая порядок array1 и array2), чтобы я получил что-то вроде этого?

dd($newCollection);
//output:
//"country" => ["Germany", "France", "Spain"]
//"city" => ["Berlin", "Paris", "Madrid"]
//"month" => ["April", "May", "June"]

OR

If есть способ получить все записи из базы данных и сделать одну из строк ключом и выбрать их в качестве значений

Пример

$users = User::get();
//this table has columns "full_name", "e-mail", "job", "birth_date", "city" and "password"
$collection = <<???>> //make column "full_name" as key and columns "e-mail", "job", "password" as values
dd($collection);
//output:
//"John Doe" => ["johndoe@mail.com", "Janitor", "topsecret"]
//"Jane Doe" => ["janedoe@mail.com", "teacher", "sercretpassword"]

Пожизненная благодарность заранее за ответ ... Я много раз читал документацию Laravel и не мог найти решения

Ответы [ 2 ]

0 голосов
/ 28 мая 2020

Технически вы задали здесь два вопроса. В одном вы объединяете набор значений в коллекцию "ключ-значение", а в другом вы просто ограничиваете значения из набора коллекций "ключ-значение" и ключа по идентификатору.

Учитывая, что вы действительно ищете для ответа на второй вопрос, в качестве ответа, вот более чистый способ сделать это:

User::select('id', 'full_name', 'email', 'job', 'password')
  ->get()
  ->keyBy('id')
  ->map(function($user) {
    return collect($user)->except('id');
  });
0 голосов
/ 26 мая 2020

У меня есть это

Решение для меня выглядит так:

$users = User::get();
//this table has columns "id", "full_name", "e-mail", "job", "birth_date", "city" and "password"

//I don't want to use all columns here
foreach($users as $user=>$value){
    $full_name = $value->full_name;
    $e-mail = $value->e-mail;
    $job = $value->job;
    $password -> $value->password;
    $endresult[] = [$full_name, $e-mail, $job, $password];
}

$collection = collect($users->keyBy('id')->pluck('id'))->combine($endresult);
dd($collection);
//output:
// 1 => ["John Doe", "johndoe@mail.com", "Janitor", "topsecret"]
// 2 => ["Jane Doe", "janedoe@mail.com", "teacher", "sercretpassword"]

Выглядит ужасно, но работает как шарм. Мне нужно было отформатировать это так, потому что в моем проекте много внешних ключей, и мне нужно разбить мои результаты на страницы, поэтому, чтобы сделать это как можно проще, мне нужно объединить все значения в один ключ (точно так же, как строка в csv), а чем звонить для каждого значения в поле зрения

спасибо за вашу поддержку

...