Мой код возвращает первую строку из Laravel $data = DB::table('sometable')->select('id')->get();
, используя:
$row = $data->first();
Затем я могу вернуть идентификатор с помощью:
$row->id;
Как теперь я могу добавить массив с ключом 'moredata' к этому объекту коллекции строк для последующего обращения к нему в коде? Я пробовал:
$row->put('moredata', $moredata);
Где $ moredata - это заполненный массив, а 'moredata' - это не поле в таблице. Laravel выдает ошибку «Вызов неопределенного метода stdClass :: put ()». Я мог бы преобразовать в массив и просто расширить массив, просто задаваясь вопросом, можно ли это сделать, сохранив структуру коллекции Laravel?
4 ответа
Вы можете просто установить свойство объекта напрямую.
$row = DB::table('sometable')->select('id')->first();
$row->moredata = $moredata;
Кроме того, если вам нужна только одна запись, используйте функцию first
в построителе запросов. В противном случае вы запросите базу данных для всех записей и отфильтруете первую в памяти.
Вы можете добавить данные: https://laravel.com/docs /5.4/eloquent-serialization#appending-values-to-json
Иногда при приведении моделей к массиву или JSON вы можете добавить атрибуты, у которых нет соответствующего столбца в вашей базе данных.
<?php
$appends = ['moredata']
function getMoredataAttribute() {
return ['data' => '...data...'];
}
Поместите это в свою модель
Попробуй это :
$data = DB::table('sometable')->select('id')->first();
$data->moredata = $moredata;
Или
$data = DB::table('sometable')->select('id')->get();
$data = $data[0];
$data->moredata = $moredata;
Похожие вопросы
Новые вопросы
laravel
Laravel - это бесплатная веб-инфраструктура PHP с открытым исходным кодом, созданная Тейлором Отвеллом и предназначенная для разработки веб-приложений по архитектурному шаблону модель-представление-контроллер (MVC) на основе Symfony. Исходный код Laravel размещен на GitHub и лицензирован в соответствии с условиями лицензии MIT.