Мой код возвращает первую строку из Laravel $data = DB::table('sometable')->select('id')->get();, используя:

$row = $data->first();

Затем я могу вернуть идентификатор с помощью:

$row->id;

Как теперь я могу добавить массив с ключом 'moredata' к этому объекту коллекции строк для последующего обращения к нему в коде? Я пробовал:

$row->put('moredata', $moredata);

Где $ moredata - это заполненный массив, а 'moredata' - это не поле в таблице. Laravel выдает ошибку «Вызов неопределенного метода stdClass :: put ()». Я мог бы преобразовать в массив и просто расширить массив, просто задаваясь вопросом, можно ли это сделать, сохранив структуру коллекции Laravel?

0
Nick W 1 Сен 2017 в 14:19

4 ответа

Лучший ответ

Вы можете просто установить свойство объекта напрямую.

$row = DB::table('sometable')->select('id')->first();
$row->moredata = $moredata;

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

1
Jerodev 1 Сен 2017 в 11:21

Вы можете добавить данные: https://laravel.com/docs /5.4/eloquent-serialization#appending-values-to-json

Иногда при приведении моделей к массиву или JSON вы можете добавить атрибуты, у которых нет соответствующего столбца в вашей базе данных.

0
jjj 1 Сен 2017 в 13:00
<?php
$appends = ['moredata']

function getMoredataAttribute() {
    return ['data' => '...data...'];
}

Поместите это в свою модель

0
Sanni 1 Сен 2017 в 11:23

Попробуй это :

$data = DB::table('sometable')->select('id')->first();
$data->moredata = $moredata;

Или

$data = DB::table('sometable')->select('id')->get();
$data = $data[0];
$data->moredata = $moredata;
0
vipin 1 Сен 2017 в 11:59