Метод distinct
Метод distinct применяется к запросу Query Builder и позволяет получить только уникальные записи из базы данных. Метод работает путём добавления оператора DISTINCT в генерируемый SQL-запрос. Метод не принимает никаких параметров и возвращает тот же экземпляр запроса, дополненный условием уникальности.
Синтаксис
<?php
DB::table($table)->distinct()->get();
?>
Пример
Давайте получим уникальные значения поля 'status' из таблицы 'articles':
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\DB;
class ArticleController extends Controller
{
public function index()
{
$res = DB::table('articles')
->distinct()
->pluck('status');
foreach ($res as $status) {
echo $status;
}
}
}
?>
Результат выполнения кода:
"draft"
"published"
"archived"
Пример
Давайте получим уникальные комбинации значений полей 'category_id' и 'status':
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\DB;
class ArticleController extends Controller
{
public function index()
{
$res = DB::table('articles')
->distinct()
->select('category_id', 'status')
->get();
foreach ($res as $row) {
echo $row->category_id . ' - ' . $row->status;
}
}
}
?>
Результат выполнения кода:
"1 - draft"
"1 - published"
"2 - published"
"3 - archived"
Пример
Давайте получим уникальные значения поля 'user_id' из таблицы 'posts' с дополнительной фильтрацией:
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\DB;
class PostController extends Controller
{
public function index()
{
$res = DB::table('posts')
->distinct()
->where('is_active', true)
->pluck('user_id');
foreach ($res as $userId) {
echo $userId;
}
}
}
?>
Результат выполнения кода:
"1"
"2"
"4"
"5"
Пример
Давайте получим общее количество уникальных значений поля 'category_id':
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\DB;
class CategoryController extends Controller
{
public function index()
{
$res = DB::table('articles')
->distinct()
->count('category_id');
echo $res;
}
}
?>
Результат выполнения кода:
"5"