Create Model in Laravel 5.8

min read

Day 10 #100DaysOfCode

Hôm này mình tiếp tục cuộc hành trình của #100DaysOfCode , các bạn biết đấy không gì là đơn giản cả, tôi cảm thấy mọi kiến thức ta học cần phải tìm hiểu từ từ mới hiểu được, đừng đi nhanh để cho xong một vấn đề hay tìm hiểu một ngôn ngữ mới. Mà phải tìm hiểu xem đó là gì? tại sao nó làm được như vậy? nó hay chổ nào? nên ta phải tìm hiểu nó, mới cảm nhận được.

Vì thế hôm này tôi phải đi nhẹ nhàng để tìm hiểu tiếp tục Laravel, hiện tại tôi đang tìm hiểu Laravel 5.8, rồi từ từ tôi sẽ tìm hiểu cao hơn nửa

Okay, Theo mình biết Laravel được xây dựng theo hướng MVC(Model - View -  Controller), chắc mọi người cũng biết rằng Model sẽ thực hiện một chức năng chuẩn bị dữ liệu cho Controller, Khi Controller có yêu cầu gọi tới, View hiện thị dữ liệu cho người dùng xem 

Okay chạy câu lệnh artisan tạo model thôi

php artisan make:model Product --migration
php artisan make:model Comment --migration

Create Model in Laravel 5.8

Đoạn code trên mình bạn nhìn thấy có --migration phía sau, ở đây mình muốn nó với laravel rằng, tôi muốn tạo model Product, đồng thời tạo file migration trong App\database\migrations để tạo cở sở dữ liệu cho mô hình
Bạn cũng có thể dùng --migration hoặc -m. Ngoài ra Laravel rất hay đã cho ta tạo nhiều lớp model như
# Tạo một lớp factory trong đường dẫn App\database\factories , trong file class factory bạn có thể tạo dữ liệu mẫu cho Table 

php artisan make:model Product --factory
php artisan make:model Product -f

# Tạo model Product và class ProductSeeder trong App\database\seeds

php artisan make:model Product --seed
php artisan make:model Product -s

# Tạo model đồng thời cũng tạo class ProductControlller trong App\Http\Controllers

php artisan make:model Product --controller
php artisan make:model Product -c

# Tạo model và migration, factory, seeder, controller...

php artisan make:model Product -mfsc
//or
php artisan make:model Product -m -f -s -c 

Create Model in Laravel 5.8

Nếu bạn muốn tạo riêng biệt theo ý muốn bạn có thể dùng cách sau đây

php artisan make:factory ProductsFactory
php artisan make:seeder ProductsTableSeeder
php artisan make:controller ProductController

Okay, về Facetory,Seeder mình sẽ tìm hiểu thêm về bài viết sau, để biết thêm về cách thực hiện nó cũng như tạo dữ liệu
Okay giờ mình đã có 2 model:
+ App\Product.php : tương ứng với table "Products" trong database
+ App\Comment.php : tương ứng với table "Comments" trong database

Để tạo hai table trên vào database, ta cần thiết lập như sau : 
Mở .env chỉnh lại database, ở đây database của mình là "laravel58" ,user:"root",pass:"" rỗng

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel58
DB_USERNAME=root
DB_PASSWORD=

Giờ chúng ta cần cấu hình table cho hai table "Products","Comments" như sau:
+ App\database\migrations\2021_01_06_014528_create_products_table.php 

<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateProductsTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('products', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->string("Title",200);
            $table->text("body");
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('products');
    }
}

+ App\database\migrations\2021_01_06_014906_create_comments_table.php 

<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateCommentsTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('comments', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->text("content");
            $table->unsignedBigInteger('product_id');
            $table->foreign('product_id')->references('id')->on('products');
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('comments');
    }
}

Okay, sao khi ta cấu hình các thuộc tính cho table xong, ta cần chạy lệnh migration để tạo table đến database "laravel58" của ta

php artisan migrate 

Create Model in Laravel 5.8

Nếu không có lỗi gì xãy ra, bạn sẽ được database "laravel58" như hình dưới đây

Create Model in Laravel 5.8

Vậy là mình đã tạo model thành công rồi, giờ là lúc cấu hình replationship giữa model Product & Comment 
+ App\Product.php : sẽ có nhiều sản phẩm , 1 sản phẩm có thể có nhiều comments 
+ App\Comment.php : có rất nhiều comments, một comment chỉ thuộc một sản phẩm 
Vì thế ta có thể cấu hình replationship như sau : 

+ App\Product.php

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Product extends Model
{
    
    public function comments() 
    {
        return $this->hasMany('App\Comment');
    }
}

+ App\Comment.php 

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Comment extends Model
{
    public function product()
    {
        return $this->belongsTo(Product::class);
    }
}

Vậy là mình đã replationship xong, để test chúng, ta cần tạo thử dữ liệu mẫu test xem sau 

Create Model in Laravel 5.8

Create Model in Laravel 5.8

+ App\Http\Controllers\ProductController.php mình sẽ hiển thị product như sau 

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Product;
use App\Comment;
class ProductController extends Controller
{
    public function index(){
        $products = Product::all()->toArray();
        $comments = Comment::all()->toArray();;
        //relationship 
        $data = Product::with("comments")->get()->toArray();
        dd(["products"=>$products,"comments"=>$comments,"ProductComment"=>$data]);
       
    }
}

+ routes/web.php

Route::get('/products','ProductController@index');

Bạn sẽ thấy như hình sau :

Create Model in Laravel 5.8

Thôi mình tìm hiểu nhiêu đây thôi, từ từ tìm hiểu thêm nửa kaka -> #100DaysOfCode

x

Ủng hộ tôi bằng cách click vào quảng cáo. Để tôi có kinh phí tiếp tục phát triển Website!(Support me by clicking on the ad. Let me have the money to continue developing the Website!)