Intereting Posts
Данные сеанса работают на локальном, но не на сервере ipage PHP изменение языковой версии PDO с несколькими именованными заполнителями не извлекает данные Как выполнить блок кода в PHP один раз в день в главном файле шаблона? Non cron Есть ли способ перенаправить на другую страницу в php без использования header ()? PHP Использование языковых конструкций в сочетании с магическими методами Терминальный клиент JavaScript (или JS + PHP) Ошибка «Нет классов метаданных для обработки» при создании таблиц БД в Symfony (с использованием Doctrine), созданных с использованием доктрины php app / console: generate: entity PHP. Загрузите веб-фотографию в альбом facebook через Graph API. Использует ли ключевое слово use в закрытии PHP по ссылке? Подсчет количества конкретных символов внутри строки конвертировать txt или doc в pdf с помощью php Какая структура PHP с Twitter Bootstrap Сортировка многомерного массива в PHP? Класс 'TeamSpeak3_Helper_Uri' не найден

Как исключить столбцы certains при использовании красноречивых

Когда я использую красноречие, я могу использовать метод «где», а затем метод «получить», чтобы заполнить объект, содержащий то, что я выбрал в своей базе данных. Я имею в виду:

$users = User::where('gender', 'M')->where('is_active', 1)->get(['pseudo', 'email', 'age', 'created_at'])->toArray(); 

Здесь я могу выбрать столбцы, которые хочу получить как «псевдо», «электронная почта» и т. Д. Но то, что я пропустил в laravel doc, – это способ сделать наоборот. Это может быть что-то вроде этого:

 $users = User::where('gender', 'M')->where('is_active', 1)->notGet(['pseudo', 'email', 'age', 'created_at'])->toArray(); 

Благодарим вас за ваш ответ и добрый день.

AFAIK не существует встроенной опции в SQL, чтобы явно исключать столбцы, поэтому Laravel не может этого сделать. Но вы можете попробовать этот трюк

Обновить

Еще один трюк – указать все столбцы в вашей модели

 protected $columns = array('id','pseudo','email'); // add all columns from you table public function scopeExclude($query,$value = array()) { return $query->select( array_diff( $this->columns,(array) $value) ); } 

Тогда вы можете сделать:

 $users = User::where('gender', 'M')->where('is_active', 1)->exclude(['pseudo', 'email', 'age', 'created_at'])->toArray(); 

Я не знаю о предыдущей версии Laravel, но в 5.4 вы можете поместить эту строку в модель User

 protected $hidden = ['pseudo', 'email', 'age', 'created_at']; 

а потом

 User::find(1); 

вернет все поля, кроме pseudo , email , age и created_at .

Но вы все равно можете получить эти скрытые поля, используя

 $user = User::find(1); $email = $user['email']; 

вы можете использовать hidden массив следующим образом:

 class Promotion extends Model { protected $table = 'promotion'; protected $hidden = array('id'); } 

Мы получаем объект красноречивым из модели, полной всех полей, преобразуем ее в массив и помещаем ее в коллекцию. Чем мы получаем все поля, кроме всех полей, заданных в массиве $ fields.

 $fields = ['a', 'b', 'c', 'N']; $object = Model::find($id); return collect($object->toArray())->except($fields); 

Более ясно, давайте приводим пример:

 // Array of fields you want to remove $fields_to_remove = ['age', 'birthday', 'address']; // Get the result of database $user = User::find($id); // Transform user object to array $user = $user->toArray(); // Create a collection with the user inside $collection = collect($user); // Get all fields of our collection except these fields we don't want $result = $collection->except($fields_to_remove); // Return return $result; 

Этот пример выше делает то же самое, что и в первом, но это объясняется более подробно.