Выборки из БД в Laravel

Этой статьёй открываем цикл из нескольких по теме составления запросов к базе данных в Laravel. В статье разберём базовые запросы для выборки всех данных таблицы и ограничения выборки.

Получение всех данных из таблицы

Для получения всех записей определённой таблицы в Laravel используется матод table класса "DB". Метод возвращает экземпляр класса, что позволяет применить другие методы к полученному результату. К примеру, можно добавить метод get, которые возвращает экземпляр StdClass, который можно обработать в цикле foreach. Приведём пример:
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\DB;
use App\Http\Controllers\Controller;

class MouseController extends Controller{
   public function index(){
      $users = DB::table('users')->get();

      foreach($users as $key => $user){
         if($user['id'] == 1){
            $user[$key]['group'] = 'admin';
         }
      }

      return view('user.index', ['users' => $users]);
   }
}
?>

Ограничение выборки

Не рекомендуется делать выборки всех данных из таблицы. Зачастую достаточно выводить только ограниченное количество столбцов и строк, что ускоряет процесс получения выборки.

Для задания нужных столбцов можно использовать метод select:
<?php
   $users = DB::table('users')->select('name', 'email as user_email')->get();
?>
Если нужно получить только уникальные результаты в выборке (без повторов), то можно использовать метод distinct:
<?php
   $users = DB::table('users')->select('name')->distinct()->get();
?>
Если же выборка уже создана и к ней надо добавить ещё один столбец, то нужно использовать метод addSelect (до метода get):
<?php
   $query = DB::table('users')->select('name');

   $users = $query->addSelect('group')->get();
?>

Условия

Ограничение выборки по правилу может быть реализовано с помощью метода where. Это методу передаётся три аргумента. Первый - имя столбца, второй - оператор сравнения (или другой, который поддерживается базой), третий - значение для сравнения. К примеру, получим всех пользователей, у которых id меньше 10:
<?php
   $users = DB::table('users')-where('id', '<', 10)->get();
?>
Если нужно сделать два условия в связке "ИЛИ", то необходимо использовать метод orWhere:
<?php
   $users = DB::table('users')->where('id', '<', 10)-where('id', '=', 42)->get();
?>

Получение строки и одного значения

Иногда требуется получить только одну строку из таблицы. Для этого лучше использовать метод "first".
<?php
   $user = DB::table('users')->where('name', 'MouseDC')->first();

   echo $user->name;
?>
А если нужно получить не всю строку целиком, а только одну ячейку, то можно отфильтровать результат с помощью метода "value"
<?php
   $email = DB::table('users')->where('name', 'MouseDC')->value('email');
?>

Получение столбца

Для получения всех значений одного столбца можно испльзовать метод "pluck".
<?php
   $names = DB::table('users')->pluck('name');

   foreach($names as $name){
      echo $name;
   }
?>
Если методу pluck передать только один параметр, то вернётся массив из выборки без ключей. Но если передать два параметра, то второй станет ключом массива:
<?php
   $names = DB::table('users')->pluck('name', 'id');

   foreach($names as $id => $name){
      echo $id . ' - ' . $name;
   }
?>
MouseDC.ru - хостинг, виртуальный хостинг, покупка доменов, проверка доменов, WHOIS, курсы создания сайтов, вебинары по созданию, курсы разработки сайтов, доработка сайтов, сопровождение сайтов, разработка сайтов, техподдержка сайтов
Cмотрите другие статьи:
Была ли статья полезной?
Была ли эта статья полезна? Есть вопрос?
хостинг для сайтов
Закажите недорогой хостинг Заказать

всего от 290 руб