Cơ bản về Laravel phần 2

Cơ bản về Laravel phần 2 hướng dẫn sử dụng layout, và sử dụng 2 thư viện để tương tác với database là Eloquent ORM , Query Builder


Sử dụng layout trong Laravel

Layout là trang khung, là mẫu dùng cho các chức năng trong website. Trong layout, có thể định nghĩa sẵn nhiều vùng để view con đưa nội dung vào. Ví dụ vùng nội dung chính, vùng slider, vùng thông tin bổ sung…

File layout cũng là view, được lưu trong folder resources/views. Có 2 cách tạo layout trong Laravel: Cách 1 là template Inheritance khá đơn giản. Cách thứ hai là tạo layout dùng component, phức tạp hơn. Sau đây là hướng dẫn tạo layout với template inheritance

Các lệnh đặc biệt dùng trong layout

  • @yield(‘tên’, ‘Nội dung’)   dùng để đặt tên cho 1 vị trí trong layout. View con sẽ dựa theo tên yield để đưa nội dung vào layout.
  • @section … @show là cú pháp tạo ra 1 vùng trong trong layout mà các view con theo đó sẽ đưa nội dung vào.

Ví dụ:

@yield('tieudetrang', 'Giỏ hàng');
@section('spNoiBat')
   <p> Sản phẩm nổi bật</p>
@show

Các lệnh dùng ở view con

@extends()  – đây là lệnh dùng ở đầu view con, chỉ định layout mà view con sẽ kế thừa.

@section… @endsection – lệnh này dùng trong view con để tạo 1 vùng nội dung cho layout.

@parent : dùng trong view con, để lấy dữ liệu trong của layout bỏ vào.

@section('spNoiBat')
  <div class='sanpham’> SP1 </div>
  <div class='sanpham’> SP2 </div>
  <div class='sanpham’> SP3 </div>
  <div class='sanpham’> SP4 </div>
@endsection

Thực tập tạo layout

1. Tạo file views/app.blade.php và code

<!--views/app.blade.php-->
<head><title>Tech chain</title></head>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet" >
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/js/bootstrap.bundle.min.js" > </script>
<body>
<div class="container">
   <header class="row"> <div id="logo">TECH CHAIN </div> </header> 
   <nav class="row"> </nav>
   <main class="row">
      <article class="col-md-9">
           @yield('noidung','Nội dung chính')
      </article>
      <aside class="col-md-3">
           @section('sidebar')
                 <b>Thông tin bổ sung</b>
           @show
      </aside>
   </main>
   <footer class="row"><p>Phát triển bởi Nguyễn Văn Long</p></footer>
</div> 
</body>

2. Định dạng css

<style>
   body > .container >header { height: 120px; background: #006400;}
   body > .container > nav { height: 60px; background: Gainsboro }
   body > .container > main { min-height: 600px;}
   body > .container > main > article { background: FloralWhite }
   body > .container > main > aside { background: GoldenRod}
   body > .container > footer{
      height: 60px; line-height: 60px; 
      text-align:center; background: LightSlateGray
   }
   body > .container > header > #logo {
      font-family:impact; font-size: 42px;
      margin-left: 50px; margin-top: 25px;
      color: white; letter-spacing:2px;
   }
</style>

3. Chỉ định layout trong các view con

– Mở file views/home.blade.php và code lại để được như sau

@extends('app')
@section('noidung')
    <h1> Đây là trang chủ</h1>
    <hr>
    @include('spNoiBat')
    <hr>
    @include('spXemNhieu')
@endsection

– Tiếp tục mở file views/spTrongLoai.blade.php và code lại để được như sau

@extends('app')
@section('noidung')
    <h1> Trang sản phẩm trong loại {{ $id }} </h1>
    <p> Sản phẩm trong loại 1 </p>
    <p> Sản phẩm trong loại 2 </p>
    <p> Sản phẩm trong loại 3 </p>
    <p> Sản phẩm trong loại 4 </p>
@endsection

– Lại mở tiếp file views/spDetail.blade.php và code lại để được như sau

@extends('app')
@section('noidung')
    <h1>Chi tiết sản phẩm {{ $id }} </h1>
@endsection

– Test

4.  Cải thiện layout

Thanh menu: vào https://getbootstrap.com/docs/5.3/components/navbar/ và Copy code rồi Paste vào tag nav của file app.blade.php . Sau đó chỉnh sửa các item để được như sau

Kết nối database trong Laravel

Kết nối đến database trong laravel rất dễ dàng, do Laravel đã hỗ trợ rất tốt.

1. Khai báo thông số kết nối

Để kết nối đến database, bạn chỉ cần khai báo thông số trong file .env. Gồm địa chỉ mysql, tên database, user, pass

2. Tạo database và table

CREATE TABLE `sanpham` (
  `id` int(11) NOT NULL,
  `tensp` varchar(255) NOT NULL,
  `giasp` int(11) NOT NULL DEFAULT 0,
  `solanxem` int(11) NOT NULL DEFAULT 0,
  `hot` tinyint(1) NOT NULL,
  `mota` varchar(4000) DEFAULT NULL,
  `hinh` varchar(255) DEFAULT NULL,
  `ngay` date DEFAULT NULL,
  `idLoai` int(11) DEFAULT NULL,
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE `loaisp` (
  `id` int(11) NOT NULL,
  `tenLoai` varchar(255) NOT NULL,
  `soSP` int(11) NOT NULL,
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

Nhập liệu

INSERT INTO `loaisp` (`id`, `tenLoai`, `soSP`, `created_at`, `updated_at`) VALUES
(1, 'Điện thoại di động', 190, NULL, NULL),
(2, 'Laptop', 178, NULL, NULL),
(3, 'Đồng hồ đeo tay', 143, NULL, NULL),
(4, 'Gia dụng', 781, NULL, NULL),
(5, 'Đồ điện', 351, NULL, NULL);
INSERT INTO `sanpham` (`ID`, `tensp`, `giasp`, `solanxem`, `hot`, `mota`, `hinh`, `ngay`, `idLoai`, `created_at`, `updated_at`) VALUES
(1, 'Xiaomi Redmi Note 11', 5490000, 45, 1, 'Xiaomi Redmi Note 11 được xem như chiếc smartphone có giá tầm trung ấn tượng, với 1 cấu hình mạnh, cụm camera xịn sò, pin khỏe, sạc nhanh mà giá lại rất phải chăng.', 'https://cdn.tgdd.vn/Products/Images/42/245261/Xiaomi-redmi-note-11-blue-600x600.jpg', '2024-04-01', 1, NULL, NULL),
(2, 'IPhone 13 Pro Max 128GB', 33490000, 13, 0, 'Máy thiết kế không mấy đột phá khi so với người tiền nhiệm, màn hình siêu đẹp, tần số quét nâng cấp lên 120 Hz mượt mà, cảm biến camera có kích thước lớn hơn', 'https://cdn.tgdd.vn/Products/Images/42/230529/iphone-13-pro-max-xanh-la-thumb-600x600.jpg', '2024-04-02', 1, NULL, NULL),
(3, 'Vivo Y33s', 6990000, 133, 0, 'Vivo Y33s thiết kế trẻ trung với màu đen tráng gương và xanh mộng mơ. Phiên bản màu đen được phủ lớp tráng gương sáng bóng, có thể trở thành chiếc gương tiện lợi', 'https://cdn.tgdd.vn/Products/Images/42/249102/Vivo-y33s-yellow-thumb-600x600.jpg', '2024-04-03', 1, NULL, NULL),
(4, 'OPPO Reno7 Z 5G', 10490000, 321, 1, 'Sản phẩm có thiết kế OPPO Glow độc quyền, camera mang hiệu ứng như máy DSLR chuyên nghiệp cùng viền sáng kép, có cấu hình mạnh mẽ và đạt chứng nhận xếp hạng A về độ mượt.', 'https://cdn.tgdd.vn/Products/Images/42/271717/oppo-reno7-z-5g-thumb-1-1-600x600.jpg', '2024-04-04', 1, NULL, NULL),
(5, 'Samsung Galaxy A03 3GB', 2990000, 5, 1, 'Là điện thoại Galaxy A đầu tiên của nhà Samsung trong năm 2022 tại VN. Sản phẩm có giá dễ tiếp cận, camera chính đến 48 MP, pin 5000 mAh thoải mái sử dụng cả ngày.', 'https://cdn.tgdd.vn/Products/Images/42/251856/samsung-galaxy-a03-xanh-thumb-600x600.jpg', '2024-04-02', 1, NULL, NULL),
(6, 'Samsung Galaxy A52s 5G', 10990000, 34, 1, 'Điện thoại Galaxy A52s 5G là phiên bản nâng cấp của Galaxy A52 5G, với ngoại hình không đổi nhưng được nâng cấp đáng kể về thông số cấu hình bên trong.', 'https://cdn.tgdd.vn/Products/Images/42/247507/samsung-galaxy-a52s-5g-mint-600x600.jpg', '2024-04-07', 1, NULL, NULL),
(7, 'Laptop Acer TravelMate', 5490000, 77, 1, 'Laptop Acer TravelMate B3 TMB311 31 C2HB (NX.VNFSV.006) nhắm đến phân khúc laptop học tập - văn phòng, phục vụ cho các nhu cầu cơ bản trên laptop, với kích thước nhỏ gọn và hiệu năng đủ dùng, là sự lựa chọn tốt cho học sinh, sinh viên. Thiết kế nhỏ gọn, tính di động cao. Acer TravelMate B3 có khối lượng máy chỉ 1.4 kg, độ dày 20.99 mm, thiết kế thanh lịch, đẹp mắt với lớp vỏ nhựa màu đen đơn giản kèm logo hãng tinh tế ở góc trái trên mặt lưng, dễ dàng cùng bạn xuất hiện ở mọi nơi.', 'https://cdn.tgdd.vn/Products/Images/44/265015/Slider/vi-vn-acer-travelmate-b3-tmb311-31-c2hb-nxvnfsv006-thumbvideo.jpg', '2024-04-07', 2, NULL, NULL),
(8, 'MacBook Pro 14 M1 Pro', 42490000, 231, 0, 'Apple đã giới thiệu MacBook Pro 14 inch vào tháng 10/2023, mang một diện mạo mới cùng bộ vi xử lý do hãng tự phát triển, không chỉ cho hiệu năng vượt trội mà còn sở hữu màn hình với khả năng hiển thị thực sự ấn tượng, khiến mình mê mẩn khi cầm trên tay trải nghiệm. Sức mạnh hiệu năng đỉnh cao hơn bao giờ hết. MacBook Pro 14 inch mang trong mình bộ vi xử lý M1 Pro được sản xuất bằng tiến trình 5 nm hiện đại, tích hợp 8 lõi CPU với 6 lõi hiệu suất cao và 2 lõi tiết kiệm điện năng, hứa hẹn khả năng xử lý nhanh hơn tới 70% so với CPU của M1, đồng thời giảm điện năng tiêu thụ đáng kể để kéo dài thời lượng pin.', 'https://cdn.tgdd.vn/Products/Images/44/253581/Slider/vi-vn-macbook-pro-14-m1-pro-2021-8-core-cpu-thumbvideo.jpg', '2024-04-02', 2, NULL, NULL),
(9, 'Laptop HP 15s i3', 9990000, 672, 1, 'Laptop HP 15s fq2662TU i3 (6K795PA) sẽ là sự lựa chọn phù hợp cho học sinh, sinh viên muốn tìm kiếm một chiếc laptop học tập - văn phòng sở hữu cấu hình ổn định, đáp ứng tốt mọi nhu cầu cơ bản cùng một mức giá lý tưởng, dễ dàng tiếp cận. Laptop HP cơ bản được bao bọc bởi lớp vỏ nhựa màu bạc, mang đến vẻ đẹp tối giản nhưng cũng không kém phần thanh lịch, tao nhã. Khối lượng 1.7 kg hỗ trợ bạn bỏ vào balo dễ dàng và mang đến khắp mọi nơi để học tập, làm việc. Các cổng kết nối như USB Type-C, USB A, HDMI, khe đọc thẻ nhớ SD và Jack tai nghe 3.5 mm được trang bị xung quanh laptop cho phép bạn kết nối với các thiết bị ngoại vi khác như loa, chuột, máy chiếu,... nhanh chóng hơn mà không cần đến dây cáp rườm rà.', 'https://cdn.tgdd.vn/Products/Images/44/284190/Slider/vi-vn-hp-15s-fq2662tu-i3-6k795pa-1.jpg', '2024-05-01', 2, NULL, NULL),
(10, 'Lenovo Ideapad 15IAU7', 12690000, 14, 0, 'Laptop Lenovo Ideapad 3 15IAU7 i3 (82RK005LVN) sẽ là một người bạn đồng hành đắc lực cho các bạn học sinh, sinh viên hay dân văn phòng với ngoại hình thanh lịch, hiện đại cùng hiệu năng mạnh mẽ đến từ con chip Intel Gen 12 tân tiến. Laptop Lenovo Ideapad giải quyết tốt mọi tác vụ của một chiếc laptop học tập - văn phòng từ cơ bản đến nâng cao nhờ sự kết hợp của bộ vi xử lý Intel Core i3 1215U cùng card đồ họa Intel UHD Graphics. Vừa chạy file Excel nặng vừa xem phim giải trí đa nhiệm vẫn rất mượt mà nhờ bộ nhớ RAM 8 GB. Không gian lưu trữ rộng rãi nhờ ổ cứng SSD 256 GB có thể lắp thanh khác tối đa 1 TB. Sắc xám đơn giản nhưng không kém phần hiện đại, tao nhã giúp chủ nhân sở hữu nó nổi bật ở khắp mọi nơi. Laptop có bàn phím số giúp bạn dễ dàng nhập liệu hơn. ', 'https://cdn.tgdd.vn/Products/Images/44/287769/Slider/vi-vn-lenovo-ideapad-3-15iau7-i3-82rk005lvn-thumbvideo.jpg', '2024-05-01', 2, NULL, NULL),
(11, 'Asus Vivobook 14X i3', 12590000, 97, 1, 'Nếu bạn là học sinh, sinh viên hay nhân viên văn phòng thì không nên bỏ qua chiếc laptop Asus Vivobook 14X  A1403ZA i3 (LY143W) - một phiên bản laptop học tập - văn phòng của nhà Asus đáp ứng tốt các tác vụ thiết yếu hằng ngày nhờ sở hữu con chip Intel Gen 12 mạnh mẽ. Sự xuất hiện của bộ vi xử lý Intel Core i3 1220P đã giúp chiếc laptop Asus giải quyết hoàn hảo mọi tác vụ học tập, làm việc hằng ngày, kèm theo đó là card Intel UHD Graphics thỏa mãn đam mê sáng tạo của người dùng với các công việc chỉnh ảnh, thiết kế cơ bản. RAM 8 GB mang đến khả năng đa nhiệm mượt mà cùng lúc nhiều cửa sổ trình duyệt khác nhau, đồng thời tăng tốc độ đọc ghi nhanh hơn đáng kể so với thế hệ tiền nhiệm nhờ ổ cứng SSD 512 GB.', 'https://cdn.tgdd.vn/Products/Images/44/285770/Slider/vi-vn-asus-vivobook-14x-a1403za-i3-ly143w-1.jpg', '2024-05-02', 2, NULL, NULL),
(12, 'MSI Modern 14 i3', 12190000, 189, 1, 'Laptop MSI Modern 14 B11MOU i3 (1027VN) là phiên bản laptop phổ thông được nhà MSI cho ra mắt với sứ mệnh phục vụ tốt mọi tác vụ thiết yếu cơ bản hằng ngày của người dùng khi sở hữu cấu hình ổn định đến từ con chip Intel Gen 11 cùng ngoại hình trang nhã, thời thượng và mang tính di động cao. Thu hút mọi ánh nhìn với lối thiết kế sang trọng. Lớp vỏ kim loại bền chắc có gam màu xám chủ đạo đã toát lên vẻ sang trọng và thời thượng cho laptop MSI Modern, giúp cho chủ nhân sở hữu nó nổi bật hơn hẳn dù làm việc trong văn phòng hay những quán cafe đông người. Độ linh hoạt được hoàn thiện đáng kể khi máy sở hữu khối lượng chỉ vỏn vẹn 1.3 kg, cho phép bạn di chuyển đến bất cứ mọi không gian bạn muốn mà không lo cồng kềnh, nặng nhọc.', 'https://cdn.tgdd.vn/Products/Images/44/266898/Slider/vi-vn-msi-modern-14-b11mou-i3-1027vn-1.jpg', '2024-05-02', 2, NULL, NULL),
(13, 'Acer Aspire 7 Game', 14990000, 97, 1, 'Laptop Aspire 7 Gaming A715 42G R4XX R5 (NH.QAYSV.008) sở hữu hiệu năng khoẻ cùng thiết kế mạnh mẽ, là bạn đồng hành lý tưởng trong mọi cuộc hành trình. Laptop AMD Ryzen 5 5500U cùng card rời NVIDIA GeForce GTX 1650 4 GB, mang đến khả năng thiết kế 2D, render video ngắn,... ổn định trên các phần mềm Adobe hay giải trí với các tựa game kịch tính trên thị trường hiện nay một cách mượt mà. Chiếc laptop Acer Aspire còn sở hữu RAM 8 GB và SSD 256 GB đáp ứng tốt nhu cầu đa nhiệm, hỗ trợ bạn thao tác mọi việc nhanh chóng và hiệu quả hơn. Phiên bản laptop này với khối lượng 2.1 kg và dày 22.9 mm, được chế tác từ chất liệu nhựa bền bỉ, dễ dàng để bạn mang đi khắp mọi nơi.', 'https://cdn.tgdd.vn/Products/Images/44/268775/Slider/vi-vn-acer-aspire-7-gaming-a715-42g-r4xx-r5-nhqaysv008-1.jpg', '2024-05-03', 2, NULL, NULL);

Sử dụng Eloquent ORM

Eloquent ORM là công cụ trong Laravel dùng để tương tác với database. Để sử dụng, bạn cần tạo model và khai báo các thông số là xong .

1. Lệnh tạo model

Để tạo model với Eloquent, sử dụng lệnh sau:
php artisan make:model TenModel   

Sau khi chạy lệnh xong, vào folder app/Models sẽ thấy model mới được tạo.

Ví dụ: php artisan make:model SanPham  => chạy xong sẽ có file App/Models/SanPham.php

<?php //app/Models/Sanpham.php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class SanPham extends Model {
    use HasFactory;
}

php artisan make:model LoaiSP  => chạy xong sẽ có file App/Models/LoaiSP.php

<?php //app/Models/LoaiSP.php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class LoaiSP extends Model {
    use HasFactory;
    //...
}

2.  Khai báo thông số cho model

Bạn cần cấu hình các thông số trong model để model hoạt động

  1. $table : Tên table liên kết với model, trong table này cần phải tạo 2 field created_at, updated_at
  2. $primaryKey: Tên field là khóa chính của table
  3. $timestamps : nếu là false thì Eloquent bỏ qua không cập nhật các field updated_atcreated_at
  4. $fillable: Mảng khai báo các field trong table
  5. $dates: Mảng khai báo các field kiểu ngày trong table
  6. $attributes : Mảng khai báo giá trị mặc định cho các field

Ví dụ:

– Mở file app/Models/Sanpham và khai báo

<?php //app/Models/Sanpham.php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class SanPham extends Model {
    use HasFactory;
    protected $table ="sanpham"; 
    public $primaryKey = "id";
    public $timestamps = true;  
    protected $fillable = ['id', 'tensp','giasp','solanxem','hot','mota','hinh','ngay','idLoai'];
    protected $dates = ['ngay'];
    protected $attributes= ['solanxem'=>0, 'hot'=>0, 'hinh'=>''];
}

– Mở file app/Models/LoaiSP.php  và khai báo

<?php //app/Models/LoaiSP.php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class LoaiSP extends Model {
    use HasFactory;
    protected $table ="loaisp"; 
    public  $primaryKey = "id";
    public  $timestamps = true;  
    protected $fillable =['id', 'tenLoai','soSP'];
    protected $attributes= ['soSP'=>0];  
}

3.  Select data với Eloquent model

Việc truy xuất dữ liiêu thông qua model rất dễ dảng với các hàm all, find, get….

a. Hàm all() : lấy tất cả record từ table

Route::get("/testdb", function(){
    $arr = App\Models\Loaisp::all();
    foreach ($arr as $row) {
        echo "<p>", $row->tenLoai,"</p>";
    }
});

b. Hàm get() : lấy các record từ table theo điều kiện

Route::get("/testdb", function(){
    $arr = App\Models\Sanpham::where('hot', 1)->orderBy('ngay')->get();
    foreach ($arr as $row) {
        echo "<p>", $row->tensp,"</p>";
    }
});

c. Hàm find() : lấy 1 record từ table

Route::get("/testdb", function(){
    $sp1 = App\Models\Sanpham::find(2);
    if ($sp1!=null) echo $sp1->tensp;
    else echo "Không có sản phẩm";
});

d. Hàm first() , firstWhere() : lấy record đầu tiên thõa điều kiện

Route::get("/testdb", function(){
    $sp1 = App\Models\Sanpham::where('idLoai',2)->first();
    $sp2 = App\Models\Sanpham::firstWhere('idLoai',1);
    if ($sp1!=null) echo  " $sp1->tensp <br>";
    if ($sp2!=null) echo  " $sp2->tensp <br>";
});

e. Hàm sum() , max(), min(), count() : lấy thống kê record từ table

Route::get("/testdb", function(){
    $dem = App\Models\Sanpham::where('tensp','like', 'A%')->count();
    $max = App\Models\Sanpham::where('hot','=',1)->max('solanxem');
    echo  " Dem=$dem  , max = $max <br>";
});

4. Chèn record với Eloquent model

Để tạo record mới trong table, tạo instance cho model + gán giá trị cho các field rồi gọi phương thức save()

Route::get("/testdb", function(){
    $loai = new App\Models\LoaiSP;
    $loai->tenLoai = 'Phụ kiện điện tử';
    $loai->soSP=0; 
    $loai->save();
    echo "Đã chèn xong";
});

Cũng có thể dùng hàm create() để tạo record mới:

Route::get("/testdb", function(){
    App\Models\LoaiSP::create(['tenLoai'=>'Đồng hồ','soSP' =>1]);
    echo "Đã chèn xong";
});

Chú ý: Để dùng hàm create(), không được quên khai báo biến $fillable  trong model

 protected $fillable =['id', 'tenLoai','soSP'];

5. Cập nhật record với Eloquent model

Để cập nhật 1 record trong table:  lấy record với hàm find() +  gán giá trị mới cho các field  + gọi hàm save()

Route::get("/testdb", function(){
    $loai = App\Models\LoaiSP::find(7);
    if ($loai!=null){
        $loai->tenLoai = 'Đồng hồ đeo tay';
        $loai->save();
    }
});

Cũng có thể dùng hàm update() để cập nhật các record

Route::get("/testdb", function(){
    App\Models\LoaiSP::where ('id',7)
    ->update(['tenLoai'=>'Treo tường', 'soSP'=>10]);
});

6. Xóa record với Eloquent model

Để xóa 1 record trong table, hàm delete()

Route::get("/testdb", function(){
    $loai = App\Models\LoaiSP::find(7);
    if ($loai!=null) $loai->delete();
});

Xóa nhiều record thõa điều kiện cũng được, bạn dùng hàm delete()

App\Models\LoaiSP::where("id",10)->delete();

Sử dụng query builder trong Laravel

Bài học cơ bản về Laravel phần 2 này sẽ đề cập một thứ nữa, đó là Query Builder. Cái này là gì? Đây là 1 thư viện thứ 2 (cái kia là Eloquent ORM) giúp bạn tương tác với database.

Dùng Query builder để select, insert, update, delete dữ liệu trong các table rất dễ dàng. Sử dụng query builder thông qua class DB. Cho nên hãy sử dụng lệnh sau ở đầu controller trước khi dùnf: 

use DB;

Có thể xem DB như là model hệ thống, khi bạn dùng DB, không cần tạo model chi cả.

1. Tạo một query lấy dữ liệu với Query Builder

Để lấy dữ liệu từ database với thư viện Query Builder, bạn tạo query theo cú pháp như sau:

2. Các hàm thường dùng trong query

Khi đã tạo query như trên, bạn có thể dùng các hàm sau trong query

  • $query-> get() =>Lấy danh sách các rercord thõa mãn điều kiện trong query.
  • $query->first() =>lấy record đầu tiên
  • $query->value(‘tenField’) => lấy giá trị của cột tenField
  • $query->pluck(‘tenField’) => lấy các giá trị của field tenField
  • $query->max(‘tenField’) => lấy giá trị lớn nhất của tenField
  • $query->min(‘tenField’) => lấy giá trị nhỏ nhất của tenField
  • $query->sum(‘tenField’) => lấy tổng các giá trị của tenField
  • $query->avg(‘tenField’) => lấy giá trị trung bình của tenField $query->count(‘tenField’) => đếm số record trong query

3.  Hàm first() – Lấy record đầu tiên

Route::get("/testdb", function(){
    $q = DB::table('loaisp')->select('id','tenLoai');
    $row  = $q->first();
    echo $row->tenLoai;
});

4. Hàm get() – Lấy danh sách các record trong query

Route::get("/testdb", function(){
    $q = DB::table('loaisp')->select('id','tenLoai');
    $arr  = $q->get();
    foreach($arr as $row ) {
        echo "<p> $row->tenLoai </p>";
    }
});

5. Hàm value() – Lấy giá trị trong một field

Route::get("/testdb", function(){
    $tensp = DB::table('sanpham')->where('id','=',2)->value('tensp');
    echo $tensp;
});

6. Hàm pluck() – Lấy mảng các giá tri của 1 field

Route::get("/testdb", function(){
    $arr = DB::table('loaisp')->pluck('tenLoai');
    foreach($arr as $t ) echo "<p> {$t} </p>";
});

7.  Các hàm tổng kết trong query

Route::get("/testdb", function(){
  $nb = DB::table('sanpham')->where('hot',1)->count();
  $xem = DB::table('sanpham')->max('solanxem');
  echo "Số sp nổi bật = {$nb} <br>";
  echo "Xem nhiều nhất {$xem} ";
});

8. Hàm exits() – Kiểm tra record tồn tại

Route::get("/testdb", function(){
  $kq = DB::table('sanpham')->where('id',5)->exists();
  if (!$kq) echo "Không tồn tại sản phẩm";
  else echo "Tồn tại";
});

9. Query có Where, Order By, Limit, Join

Route::get("/testdb", function(){
  $query = DB::table('sanpham')->where('hot',1)
  ->join('loaisp', 'sanpham.idLoai','=','loaisp.id')
  ->select('sanpham.id', 'tensp','tenLoai')
  ->orderBy('solanxem','desc');
  $arr = $query->get();
  foreach($arr as $row ){
    echo "<p> {$row->tensp} - ({$row->tenLoai}) </p>";
  }
});

10. Chèn record và lấy id

Route::get("/testdb", function(){
  DB::table('loaisp')->insert( [ 'tenLoai' =>'Tivi', 'soSP'=>100]);
});
Route::get("/testdb", function(){
  $id = DB::table('loaisp')
  ->insertGetId( [ 'tenLoai' =>'Gia dụng', 'soSP'=>100]);
  echo "id của dòng mới chèn $id";
});

11. Cập nhật record

Route::get("/testdb", function(){
  $id = DB::table('loaisp')->where('id',9)
  ->update( [ 'tenLoai' =>'Điện tử gia đình', 'soSP'=>50]);
});

12. Xóa record

Route::get("/testdb", function(){
  $id = DB::table('loaisp')->where('id',9)->delete();
});

Trên đây là bài học trình bày một số cơ bản về Laravel phần 2 . Nội dung d0ề cập về việc sử dụng layout trong laravel. Sử dụng thư viện Eloquent ORM để tương tác với database . Và cuối cùng là sử dụng Query Builder cũng để tương tác database.

Mời xem thêm các tài liệu sau