評論模組開發總結

聖堂刺客發表於2018-11-01

需求:
1、僅限登入使用者評論(認證這塊兒就很簡單了)
2、評論佔一樓。對這條評論追加評論顯示在其下方。(百度貼吧的樣子)

由於選擇了百度貼吧樣式的評論形式,所以也不用巢狀,挺方便。

這篇文章最主要解決的也不是上述幾點,而是怎樣利用好Laravel框架提供的模型關聯預載入功能。

模型

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Comment extends Model
{
    public function user()
    {
        return $this->belongsTo(User::class);
    }
    public function childComments()
    {
        return $this->hasMany(Comment::class, 'pid');
    }
}

看到了沒有,在Comment的模型裡,關聯了子評論(就是上面講到的評論的評論)。這個用法(我不知道該叫什麼,我自己叫它子模型),我好像沒有在文件中看到,但是在其他人的原始碼中發現了,於是我就拿來用了。pid我想都懂,評論的pid為0,評論的評論pid為評論id。

獲取資料

$comments = Comment::with('user','childComments.user')->where('pid', '0')->orderBy('id')->get();

這段程式碼很容易看懂,關鍵是那個 childComments.user 。user在第一層迴圈的時候用來解決N+1的問題,childComments.user是在第二層迴圈的時候解決N+1的問題。原來模型關聯查詢還能巢狀,Laravel考慮的確實非常周到。卡在這裡幾個小時,希望這篇文章可以幫助到剛開始學習的朋友。

最後附上檢視檔案裡的寫法。

@foreach($comments as $comment)
    {{$comment->user-name}}評論了{{$comment->content}}     
    @foreach($comment->childComments as $childComment)
        {{$childComment->user-name}}評論了{{$childComment->content}}
    @endforeach

@endforeach
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章