Когда я использую красноречие, я могу использовать метод «где», а затем метод «получить», чтобы заполнить объект, содержащий то, что я выбрал в своей базе данных. Я имею в виду:
$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;
Этот пример выше делает то же самое, что и в первом, но это объясняется более подробно.