Как настроить коллекцию объектов в Laravel - PullRequest
0 голосов
/ 18 апреля 2019

Я хочу получить строки из базы данных, привести их в массив, а затем добавить пользовательскую строку, чтобы я мог передать все это в представление (файл Blade).Я пытался использовать ->push(), но мне кажется, что я не могу привести формат массивов в соответствие.Приведенный ниже пример кода получает строки с идентификатором пользователя, именем и местоположением.

$profiles = \App\Profiles::orderBy('created_at', 'DESC')->get();

Отсюда я хочу добавить «расстояние» к каждой записи в коллекции.Я хочу, чтобы из базы данных извлекалась настраиваемая информация, чтобы можно было беспрепятственно передавать ее в представление (файл Blade).

Ответы [ 4 ]

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

Когда вы выбираете данные из базы данных, используя "get ()", тогда это набор объектов. Теперь, как с этим обращаться.

$profiles = \App\Profiles::orderBy('created_at', 'DESC')->get()->toArray();

$collect = []; //empty array to collect custom data
foreach ($profiles as $profile) {

      $profile["distance"] = "Your data";
      $collect[] = $profile; 
}

Теперь вы можете передать массив "$ collect" в вашпросмотреть файл

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

Вы можете перебрать свой массив и вставить данные, как показано ниже:

$profiles = \App\Profiles::orderBy('created_at', 'DESC')->get();

foreach ($profiles as &$profile) { // loop by reference so it will update current array
   $profile->distance = "Your Value";
}

Затем вы можете передать этот массив на просмотр.Надеюсь, это поможет вам.

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

Вы получаете экземпляр Collection , так почему бы не использовать один из его полезных методов?В этом случае Map () :

map ()

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

$collection = collect([1, 2, 3, 4, 5]);

$multiplied = $collection->map(function ($item, $key) {
    return $item * 2;
});

$multiplied->all();

// [2, 4, 6, 8, 10]

Итак, в вашем случае:

$profiles = \App\Profiles::orderBy('created_at', 'DESC')->get();

$profiles->map(function ($profile) {
    $profile->distance = 'your value';

    return $profile;
});


// Then return it to your view
return view('profiles')->withProfiles('profiles'));

Конечно,Вы можете встроить все это:

$profiles = \App\Profiles
                ::orderBy('created_at', 'DESC')
                ->get()
                ->map(function($profile) {
                    $profile->distance = 'your value';

                    return $profile;
                });

// Then return it to your view
return view('profiles')->withProfiles('profiles'));

Вы сказали:

Я в основном хочу получить информацию из базы данных и свою настраиваемую информацию в одном массиве, чтобы я мог легко передать ее вview.

Если вы хотите настроить / отформатировать ваши данные, чтобы вернуть их в ваше представление, почему нет необходимости использовать Eloquent Resources ?Проверьте этот раздел документации.

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

$profiles - это коллекция Eloquent, а не массив.

$profiles = Profiles::latest()->get();

foreach ($profiles as $profile) {
   $profile->distance = 'your value';
}

return view('profile', compact('profiles');
...