Конструктор
— специальный класс с набором методов,
каждый из которых формирует определенную
часть запроса.
Работаем с
App\Http\Controllers\Admin\Core.php
vendor\laravel\framework\src\Illuminate\Database\Connection.php
– здесь описан метод table.
Класс Builder описан
здесь:
\vendor\laravel\framework\src\Illuminate\Database\Query\Builder.php
Документация:
https://laravel.com/docs/5.4/queries
Метод get() выбирает
всю информацию из интересующей таблицы.
Выберем все записи: "select * from
`articles`":
$articles = DB::table('articles')->get();
Выбирает только первую запись: "select
* from `articles` limit 1"
$articles = DB::table('articles')->first();
$articles = DB::table('articles')->first();
Выборка по одному полю: "select `name`
from `articles` limit 1". Возвращает строку.
$articles = DB::table('articles')->value('name');
Выберем
записи порциями:
<?php
namespace App\Http\Controllers\Admin;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use DB; // подключим БД
class Core extends Controller
{
protected static $articles;
// В конструкторе мы также можем определить список посредников для работы.
public function __construct() {
//$this->middleware('mymiddle');
}
public static function addArticles($array) {
return self::$articles[] = $array;
}
// Возвращает список материалов:
public function getArticles() {
// Выборка по частям, укажем, что на нужны 2 записи
DB::table('articles')->orderBy('id')->chunk(2, function($articles) {
// обработаем порции данных
foreach($articles as $article) {
Core::addArticles($article);
}
});
dump(self::$articles);
}
// Возвращает один материал:
public function getArticle($id) {
echo $id;
}
}
namespace App\Http\Controllers\Admin;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use DB; // подключим БД
class Core extends Controller
{
protected static $articles;
// В конструкторе мы также можем определить список посредников для работы.
public function __construct() {
//$this->middleware('mymiddle');
}
public static function addArticles($array) {
return self::$articles[] = $array;
}
// Возвращает список материалов:
public function getArticles() {
// Выборка по частям, укажем, что на нужны 2 записи
DB::table('articles')->orderBy('id')->chunk(2, function($articles) {
// обработаем порции данных
foreach($articles as $article) {
Core::addArticles($article);
}
});
dump(self::$articles);
}
// Возвращает один материал:
public function getArticle($id) {
echo $id;
}
}
Возвращает:
"select * from `articles` order by `id` asc limit 2 offset 0"
"select * from `articles` order by `id` asc limit 2 offset 2"
"select * from `articles` order by `id` asc limit 2 offset 4"
"select * from `articles` order by `id` asc limit 2 offset 6"
"select * from `articles` order by `id` asc limit 2 offset 8"
Выборка информации по определенному
полю:
$articles = DB::table('articles')->pluck('name');
$articles = DB::table('articles')->pluck('name');
pluck в отличие от value выбирает
все записи по определенному полю.
"select `name` from `articles`"
count() возвращает кол-во записей
таблицы:
$articles = DB::table('articles')->count(); // "select count(*) as aggregate from `articles`"
$articles = DB::table('articles')->count(); // "select count(*) as aggregate from `articles`"
max() выбирает
максимальное значение определенного
поля:
$articles = DB::table('articles')->max('id'); // "select max(`id`) as aggregate from `articles`"
$articles = DB::table('articles')->max('id'); // "select max(`id`) as aggregate from `articles`"
select() удобен,
если нужно указать определенные поля
// $articles = DB::table('articles')->select('name', 'id', 'text'); // возвращается объект класса Builder
$articles = DB::table('articles')->select('name', 'id', 'text')->get(); // возвращает сформированный запрос в виде массива
// $articles = DB::table('articles')->select('name', 'id', 'text'); // возвращается объект класса Builder
$articles = DB::table('articles')->select('name', 'id', 'text')->get(); // возвращает сформированный запрос в виде массива
distinct() выборка только уникальных
значений
$articles = DB::table('articles')->distinct()->select('name')->get(); // "select distinct `name` from `articles`"
$articles = DB::table('articles')->distinct()->select('name')->get(); // "select distinct `name` from `articles`"
Пример с условием:
$query = DB::table('articles')->select('name'); // здесь сохраняется объект класса Builder
Здесь идет код. Если он выполняется, то выбираем еще по другим полям.
$articles = $query->addSelect('text AS fulltext')->get(); // addSelect добавляет поля в будущий sql-запрос. text AS fulltext - псевдоним
$query = DB::table('articles')->select('name'); // здесь сохраняется объект класса Builder
Здесь идет код. Если он выполняется, то выбираем еще по другим полям.
$articles = $query->addSelect('text AS fulltext')->get(); // addSelect добавляет поля в будущий sql-запрос. text AS fulltext - псевдоним
Добавим
в запрос условие Where, т.е
используем фильтрацию:
у where 3 аргумента: поле, оперетор зравнения
и значение
$articles = DB::table('articles')->select('name', 'id', 'text')->where('id', '=', 2)->get();
// выводит, подготовливая значение: "select `name`, `id`, `text` from `articles` where `id` = ?"
$articles = DB::table('articles')->select('name', 'id', 'text')->where('id', '=', 2)->get();
// выводит, подготовливая значение: "select `name`, `id`, `text` from `articles` where `id` = ?"
Если необходимо указать несколько
условий:
$articles = DB::table('articles')->select('name', 'id', 'text')
->where('id', '>', 2)
->where('name', 'like', 'test%')
->get();
// "select `name`, `id`, `text` from `articles` where `id` > ? and `name` like ?"
->where('id', '>', 2)
->where('name', 'like', 'test%')
->get();
// "select `name`, `id`, `text` from `articles` where `id` > ? and `name` like ?"
Добавим
логическое или:
$articles = DB::table('articles')->select('name', 'id', 'text')
->where('id', '>', 2)
->where('name', 'like', 'test%', 'or')
->get();
->where('id', '>', 2)
->where('name', 'like', 'test%', 'or')
->get();
Мы
можем прописать массив с where:
$articles = DB::table('articles')->select('name', 'id', 'text')
->where([
['id', '>', 2],
['name', 'like', 'test%', 'or']
])
->get();
->where([
['id', '>', 2],
['name', 'like', 'test%', 'or']
])
->get();
Метод orWhere()
$articles = DB::table('articles')->select('name',
'id', 'text')
->where('id', '>', 2)
->where('name', 'like', 'test%', 'or')
->orWhere('id', '<', 1)
->get();
->where('id', '>', 2)
->where('name', 'like', 'test%', 'or')
->orWhere('id', '<', 1)
->get();
Запрос
будет выглядеть так: "select
`name`, `id`, `text` from `articles` where `id` > ? or `name` like
? or `id` < ?"
Фильтрация
between. Выберем статьи между
1 и 5:
$articles = DB::table('articles')->whereBetween('id',
[1,5])->get();
Отрицание
в between:
$articles
= DB::table('articles')->whereNotBetween('id', [1,5])->get();
Where
+ in:
$articles = DB::table('articles')->whereIn('id',
[1,5])->get();
$articles =
DB::table('articles')->whereNotIn('id',
[1,5])->get();
Группировка
значений:
$users = DB::table('users')
->select(DB::raw('count(*) as user_count,
status'))
->where('status', '<>', 1)
->groupBy('status')
->get();
Лимит:
Метод
take() указывает сколько
элементов нужно выбрать из БД.
$articles = DB::table('articles')->take(4)->get();
Метод
skip() пропускает записи:
$articles = DB::table('articles')->take(4)->skip(2)->get();
Вставка данных в БД
Вставка нескольких
записей:
DB::table('articles'->insert(
[
['name' => 'Sample blog post 5', 'text' => 'Text of Sample blog post 5'],
['name' => 'Sample blog post 6', 'text' => 'Text of Sample blog post 6']
]
);
[
['name' => 'Sample blog post 5', 'text' => 'Text of Sample blog post 5'],
['name' => 'Sample blog post 6', 'text' => 'Text of Sample blog post 6']
]
);
Вставка одной записи:
DB::table('articles')->insert(['name'
=> 'Sample blog post 5', 'text' => 'Text of Sample blog post
5', 'img' => 'pic5.jpg']);
Узнаем идентификатор
последней добавленной записи insertGetId:
$result =
DB::table('articles')->insertGetId(['name' => 'Sample
blog post 6', 'text' => 'Text of Sample blog post 6', 'img' =>
'pic6.jpg']);
Обновление информации:
DB::table('articles')->where('id',
13)->update(['name'=>'Sample blog post 61']);
Метод update
возвращает количество затронутых
записей.
$result =
DB::table('articles')->where('id', 13)->update(['name'=>'Sample
blog post 62']);
dump($result); // 1
dump($result); // 1
Удаление
данных:
$result =
DB::table('articles')->where('id', 13)->delete();
dump($result); // 1
dump($result); // 1
Объединение
таблиц
$users = DB::table('users')
->leftJoin('posts', 'users.id', '=', 'posts.user_id')
->get();
Комментариев нет:
Отправить комментарий