Исключение Laravel добавляет значения из результатов модели

Laravel имеет возможность добавить $appends массив для каждой модели, делающий дополнительные значения автоматически доступными, как если бы они были атрибутами базы данных, добавляя методы доступа для каждой из них.

Это обычно довольно удобно, за исключением того, что в этом случае мне нужно ТОЛЬКО получить поля, в которые я помещаю select() потому что DataTables ожидает только то, что я ему отправляю.

Пример:

Item::select(['image', 'name', 'color']);

Вернет добавленные поля после color в атрибутах.

Как принудительно исключить добавляемые значения при возврате результатов?

Или, как альтернатива, как получить DataTables игнорировать определенные атрибуты?

Не уверен, какой маршрут является наименее дорогостоящим.

В настоящее время использую yajra/laravel-datatables пакет для отправки данных в запрос JJuery DataTables AJAX.

3

Решение

Вы можете вызвать каждую функцию в объекте коллекции, а затем использовать метод setHidden, чтобы исключить ненужные поля, подобные этому

$item= Item::select(['image', 'name', 'color'])->get()->each(function($row){
$row->setHidden(['appendedField1', 'appendedField2']);
});

А для yajra / laravel-datatables вы можете использовать что-то вроде

$item= Item::select(['image', 'name', 'color']);
return Datatables::of($item)->remove_column('appendedField1');
3

Другие решения

Чтобы решить эту проблему, я добавил этот метод в свой Item модель:

public static function getAppends()
{
$vars = get_class_vars(__CLASS__);

return $vars['appends'];
}

Затем использовал следующий код в контроллере:

$items = Item::select(['image', 'name', 'color']);

$DT = Datatables::of($items);

call_user_func_array([$DT, 'removeColumn'], Item::getAppends()); // Has to be called this way with yajra/laravel-datatables-oracle v3.* if passing an array.

return $DT->make(true);
1

По вопросам рекламы [email protected]