Merhabalar,
Commentable Morph metodunu kullanarak bir yorum sistemi geliştirmeye çalışıyorum. Laravel dökümantasyonunda verilen örneğe ek olarak ben parent_id ile yorumlar ve alt yorumlar gibi iç içe yorumlar yapılabilmesini sağlamaya çalışıyorum.
Aşağıda kod örneklerimi de paylaşıyorum. Burda yaşadığım problem şu;
İlk seviyedeki yorumlar ve onun altındaki yorumlarda problem yok. fakat alt yorum ayapılan yorumlarda query sayıları artıyor.
Örnek:
- 1. Seviye yorum
- 1. 2.Seviye 1. alt yorum
- 2. 2.Seviye 2. alt yorum
Burada problem yok.
- 1. Seviye yorum
- 1. 2.Seviye 1. alt
- 2. 3.Seviye 1.alt yorum Alt yorumu
- 3. 3. Seviye 1.alt yorum alt yorumu
- 2. 2.Seviye 2. alt yorum
Şeklinde olan 2 seviye yapılan 3. seviyedeki yorumlar query sayılarını arttırıyor.
Bunun için nasıl bir önlem alabilirim acaba ?
İsterseniz debugbar ve telescope sonuçlarını sizlere sunabilirim.
İlginiz için teşekkürler iyi çalışmalar.
Model\Comment.php
<?php
namespace App;
use App\Traits\Commentable;
use Illuminate\Database\Eloquent\Model;
class Comment extends Model
{
use Commentable;
protected $fillable = ['body', 'user_id', 'parent_id', 'commentable_id'];
/**
* Get all of the owning commentable models.
*/
public function commentable()
{
return $this->morphTo();
}
public function user()
{
return $this->belongsTo(User::class);
}
}
Model\Quote.php
<?php
namespace App\Models\Quotes;
use App\Traits\Commentable;
class Quote extends Model
{
use Commentable;
}
Trait\Commentable.php
<?php
namespace App\Traits;
trait Commentable
{
public function comments()
{
return $this->morphMany('App\Comment', 'commentable')->with('user','replies');
}
public function replies()
{
return $this->hasMany('App\Comment')->with('user','replies');
}
}
Controller\QuoteController.php
public function show($id)
{
$quote = Quote::with('comment','replies')->findOrFail($id);
return view('quotes.show', compact('quote'));
}
View\partials_comment_replies.blade.php
@foreach($comments as $comment)
<div class="display-comment">
<strong>{{ $comment->user->name }}</strong>
<p>{{ $comment->body }}</p>
@include('partials._comment_replies', ['comments' => $comment->replies])
</div>
@endforeach
PhpDebugBar Info