Phương thức whereExists cho phép bạn viết các mệnh đề where exists. Phương thức whereExists chấp nhận tham số là một Closure cái mà sẽ nhận một query builder instance cho phép bạn định nghĩa truy vấn mà sẽ được đặt trong mệnh đề.
orderBy. Phương thức orderBy cho phép bạn sắp xếp kết quả của truy vấn bởi một cột cho trước. Tham số đầu tiên của phương thức orderBy nên là cột bạn muốn sắp xếp, trong khi tham số thứ 2 là chiểu của sắp xếp và có thể là asc hoặc desc.
groupBy / having / havingRaw. Phương thức groupBy và having có thể được sử dụng để nhóm kết quả truy vấn. Phương thức having có cách sử dụng tương tự phương thức where.
Phương thức havingRaw có thể được sử dụng thiết lập các chuỗi vào mệnh đề having. Ví dụ chúng ta có thể tìm toàn bộ các department mà có sale lớn hơn $2,500.
Insert. Query builder cũng cung cấp phương thức insert cho việc chèn các bản ghi vào trong bảng. Phương thức insert chấp nhận một mảng tên các cột và giá trị để thêm vào.
Bạn có thể chèn các bản ghi riêng biệt vào bảng với một lần gọi insert bằng cách truyền vào một mảng các mảng. Mỗi mảng con đại diện cho một dòng sẽ được chèn vào bảng.
Tất nhiên, ngoài việc chèn thêm bản ghi vào database, query builder cũng có thể cập nhật bản ghi có sẵn bằng cách sử dụng phương thức update. Phương thức update giống như insert, chấp nhận một mảng các cặp cột và giá trị có trong cột để cập nhật. Bạn có thể ràng buộc truy vấn update sử dụng mệnh đề where.
Tất nhiên, query builder cũng có thể được sử dụng để xóa các bản ghi từ bảng thông qua phương thức delete. Bạn có thể ràng buộc cú pháp delete bằng cách thêm mệnh đề where trước khi gọi phương thức delete.
Xây dựng một số trang phục vụ các việc sau nhập thông tin sản phẩm, quản lý danh sách sản phẩm: xóa sản phẩm, sửa sản phẩm… Chúng ta cùng bắt đầu thực hiện nào.
Bước 2: Tạo một controller tên là ProductController.
c:\xampp\htdocs\laravel-test>php artisan make:controller ProductController --res
ource
Controller created successfully.
Bước 5 : Thêm nội dung phương thức create trong ProductController.
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
return view('fontend.product.create');
}
Bước 6 : Tiếp đến chúng ta xử lý insert sản phẩm vào CSDL, nó sẽ nằm trong phương thức store của ProductController.
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
$validator = Validator::make($request->all(), [
'name' => 'required|max:255',
'price' => 'required|number',
'content' => 'required',
'image_path' => 'required'
]);
if ($validator->fails()) {
return redirect('product/create')
->withErrors($validator)
->withInput();
} else {
// Lưu thông tin vào database, phần này sẽ giới thiệu ở bài về database
$active = $request->has('active')? 1 : 0;
$product_id = DB::table('product')->insertGetId(
'name' => $request->input('name'),
'price' => $request->input('price'),
'content' => $request->input('content'),
'image_path' => $request->input('image_path'),
'active' => $active
);
return redirect('product/create')
->with('message', 'Sản phẩm được tạo thành công với ID: ' . $product_id);
}
}
Bước 8 : anh sách sản phẩm sẽ được xử lý trong phương thức index của ProductController.
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
$products = DB::table('products')->get();
return view('fontend.product.list')->with($products);
}
Bước 9 : Tiếp đến chúng ta tạo một view để hiển thị danh sách sản phẩm tên là list.blade.php nằm trong thư mục resources/views/fontend/product.
Bước 10 : Chúng ta sử dụng phương thức edit() trong ProductController để chỉnh sửa sản phẩm.
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function edit($id)
{
$product = DB::table('products')->find($id);
return view('fontend.product.edit')->with(compact('product'));
}
Bước 11 : Tạo một view để chỉnh sửa sản phẩm resources/views/fontend/product/edit.blade.php.
Bước 12 : Phương thức update() của ProductController đảm nhận phần cập nhật nội dung sản phẩm.
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id)
{
$active = $request->has('active')? 1 : 0;
$updated = DB::table('products')
->where('id', '=', $id)
->update([
'name' => $request->input('name'),
'price' => $request->input('price'),
'content' => $request->input('content'),
'image_path' => $request->input('image_path'),
'active' => $active,
'updated_at' => \Carbon\Carbon::now()
]);
return Redirect::back()
->with('message', 'Cập nhật sản phẩm thành công')
->withInput();
}
4. Tổng kết.
Qua bài này mình đã giới thiệu cho các bạn các phương thức quan trọng trong Query Builder.Các bạn thấy nó khá ngắn gọn và dễ sử dụng phải không nào,từ những câu lệnh truy vấn đến phức tạp.Ngoài ra Query Builder còn nhiều phương thức khác,bài viết được tham khảo tại trang chủ của Laravel các bạn có thể vào đây để tìm hiểu thêm các phương thức khác nhé.Sang bài tiếp theo mình sẽ giới thiệu cho các bạn về Eloquent ORM trong Laravel.
Đã thực hiện lại (OK)
C:\xampp\htdocs\blog\routes\web.php
<?php
use Illuminate\Support\Facades\Route;
/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/
Route::get('product', 'ProductController@index')->name('index');
Route::resource('product', 'ProductController', ['only' => [
'create', 'store', 'edit','show','delete'
]]);
Route::resource('product', 'ProductController')->except(['show', 'create', 'store','delete']);
Route::get('product/delete/{id}','ProductController@delete');
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Input;
use Redirect;
use Validator;
class ProductController extends Controller {
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index() {
$products = DB::table('productstest')->get();
return view('fontend.product.list')->with('products', $products);
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create() {
return view('fontend.product.create');
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request) {
$validator = Validator::make($request->all(), [
'name' => 'required',
]);
if ($validator->fails()) {
return redirect('product/create')->withErrors($validator)->withInput();
} else {
// Lưu thông tin vào database, phần này sẽ giới thiệu ở bài về database
$active = $request->has('active') ? 1 : 0;
$product_id = DB::table('productstest')->insertGetId(
array(
'name' => $request->input('name'),
'price' => $request->input('price'),
'content' => $request->input('content'),
'img_path' => $request->input('image_path'),
'active' => $active,
)
);
return redirect('product/create')->with('message', 'Sản phẩm được tạo thành công với ID: ' . $product_id);
}
}
/**
* Display the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function show($id) {
return view('fontend.product.show');
}
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function edit($id) {
$product = DB::table('productstest')->find($id);
return view('fontend.product.edit')->with(compact('product'));
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id) {
$active = $request->has('active') ? 1 : 0;
$updated = DB::table('productstest')
->where('id', '=', $id)
->update([
'name' => $request->input('name'),
'price' => $request->input('price'),
'content' => $request->input('content'),
'img_path' => $request->input('image_path'),
'active' => $active,
'updated_at' => \Carbon\Carbon::now(),
]);
return Redirect::back()->with('message', 'Cập nhật sản phẩm thành công')->withInput();
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function delete($id) {
DB::delete('delete from productstest where id = ?',[$id]);
echo "Record deleted successfully.<br/>";
}
}