1. Create Authentication In Laravel 5.8
  2. Create Cart Laravel 5.4 +VueJS
  3. Create Multiple Subcategories in Laravel 5.8
  4. Create Template Vuejs and Laravel 5.4
  5. Giới thiệu Laravel 5.4
  6. Hướng dẫn cài đặt laravel 5.4 phần 1
  7. Hướng dẫn cài đặt laravel 5.4 phần 2
  8. Passing data from Laravel to Vue
  9. Multiple Subcategories in Laravel 5.8 + Vue
  10. Login State in Angular 7 + Laravel 5.4
  11. Laravel 5.7 + Vue SPA
  12. Send Mail using Laravel 5.4 + VueJS
  13. SHOW DATA VUEJS IN TEMPLATE BLADE LARAVEL
  14. Xây dụng chức năng Register+ Login bằng Laravel 5.4 + VueJS
  15. Xác thực API bằng OAuth 2 với Laravel 5.4 Passport
  16. Tạo ứng dụng Laravel 5.4 kết hợp với Vuejs
  17. Create Multiple Comment in Laravel 5.8
  18. Filemanager in Laravel 5.8
  19. Connecting Multiple Databases in Laravel 5.8
  20. Laravel Redirect HTTP to HTTPS via .htaccess
  21. User Roles and Permissions in Laravel 5.8
  22. Export Excel using maatwebsite/excel in Laravel 5.8
  23. Show All Image from public folder using Laravel 5.8
  24. Multiple Image Upload using Ajax with Laravel 5.8
  25. Form Request Validation in Laravel 5.8
  26. Send Email using Queue in Laravel 5.8
  27. Ckeditor and Ckfinder in Laravel 5.8 + Vue.js
  28. Add a Marker to Google Map in Laravel 5.8
  29. Pagination for search results laravel 5.8

Create Multiple Comment in Laravel 5.8

min read

Xây dựng Multiple Comment trong Laravel, cũng như bài trước mình có chia sẻ với mọi người cách tạo (Create Multiple Subcategories in Laravel 5.8Multiple Subcategories in Laravel 5.8 + Vue) thì trong bài này cũng tương đối giống vậy.

Đầu tiên chúng ta cần cài đặt Laravel 5.8

# composer global require laravel/installer
or 
# composer create-project --prefer-dist laravel/laravel blog "5.8.*"

Sau khi cài đặt và tạo project thành công! Ta tiến hành tìm hiểu các mối liên kết giữa Post và Comment với User như thế nào? Chúng ta cũng biết rằng!

+ Post -> (hasMany) Comments, Post -> (belongsTo) User

//App\Post
    public function user(){
        return $this->belongsTo(User::class);
    }
    public function comments() 
    {
    return $this->hasMany('App\Comment');
    }

+ Comment -> (belongsTo) Post và User

//App\Comment 
    public function user()
    {
    return $this->belongsTo('App\User');
    }

    public function post()
    {
        return $this->belongsTo(Post::class);
    }

+ User -> (hasMany) Comments, User -> (hasMany) Posts

//App\User 
    public function posts(){
        return $this->hasMany(Post::class);
    }
    public function comments() 
    {
        return $this->hasMany('App\Comment');
    }

Chúng ta đã liên kết mối quan hệ giữa các table(Posts,Users,Comments), giờ chúng ta cần tạo migration database của Posts và Comments như sau

# php artisan make:migration create_posts_table --create=posts

Schema::create('posts', function (Blueprint $table) {
    $table->bigIncrements('id');
    $table->string('title');
    $table->string('keyword');
    $table->string('des');
    $table->string('slug');
    $table->string('image');
    $table->string('content');
    $table->timestamps();
});

# php artisan make:migration create_comments_table --create=comments

Schema::create('comments', function (Blueprint $table) {
    $table->bigIncrements('id');
    $table->integer('user_id')->unsigned();
    $table->integer('post_id')->unsigned();
    $table->text('body');
    $table->timestamps();
});

Bên trên chúng ta chưa thấy các khóa ngoại của chúng liên kết, giờ ta chỉnh sửa lại table posts như sau:

# php artisan make:migration create_user_post_table --create=user_post

public function up()
    {
        Schema::table('posts', function (Blueprint $table) {
            $table->unsignedBigInteger('user_id');
            $table->foreign('user_id')->references('id')->on('users');
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::table('posts', function(Blueprint $table)
        {
            $table->dropForeign(['user_id']);
        });
    }

Chúng ta đã add một user_id vào table posts, để thể hiện mối liện hệ của  table Users và Posts, giờ ta cần chỉnh sửa lại table Comments xíu, vì để có được multiple comments ta cần phải xác định thêm một cột comment_id vào table comments

# php artisan make:migration create_add_column_comments_table --create=comments

public function up()
    {
        Schema::table('comments', function (Blueprint $table) {
            $table->integer('comment_id')->after('post_id')->unsigned();
        });
    }

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

Bên cạnh đó ta cần chỉnh sửa lại file App\Comment.php của ta, thêm vào hai phương thức sau:

 public function comments()
    {
        return $this->hasMany(Comment::class,'comment_id');
    }
    public function childrenComments()
    {
        return $this->hasMany(Comment::class,'comment_id')->with('childrenComments')->with('user');
    }

Trong App\Http\CommentControler.php, Nếu bạn muốn hiện thị post_id nào thì chèn tham số vào function

/**
* GET POST COMMENT
*/
public function getPostComment($post_id){
  
   $comment = Comment::with('user')->where("post_id",$post_id)->where("comment_id",0)->with('childrenComments')->get()->toArray();
  // dd($comment);
   //return Response()->json($comment);
   return View('comment')->with(array('comment'=>$comment));
}

Trong Views/comment.blade.php bạn chỉ việc show nội dung ra, bạn có thể tạo một childrenComment và include nó vào foreach để show ra multiple comment

@foreach($comment as $item)
    //show comment 
    //or
    //includes('childrenComments',['childrenComments'=>$item->childrenComments])
@foreach

Comment trên website:https://hoanguyenit.com mình cũng sữ dụng cách trên, nhưng mình kết hợp giữa Laravel + Vue làm cho comment multiple của mình!

Bạn có thể xem lại phần tạo: Create Multiple Subcategories in Laravel 5.8

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!)