آفلاین
user-avatar

نمایش ریپلای کامنت بدون تایید ادمین

2 سال پیش
توسط امیر علیزاده آپدیت شد
آفلاین
user-avatar
مرتضی صبیحی ( 9846 تجربه )
2 سال پیش
تخصص : (VueJs) Front-end developer

سلام
من یک سیستم کامنت با قابلیت ریپلای ایجاد کردم
وقتی کاربر کامنت خودش رو ارسال میکنه در سایت نمایش داده نمیشه و فقط ادمین باید اون کامنت رو تایید کنه تا در سایت نمایش داده بشه
تا اینجا مشکلی نیس
ولی وقتی به یک کامنتی ریپلای داده میشه(توسط هر کاربری) اون ریپلای بدون تایید ادمین در سایت نمایش داده میشه
مشکل از کجاس؟

کنترلر پست متود show

    public function show(Post $post)
{
    $count = $post->comments()->count();
    $comments = $post->comments()->where('approved',true)->get();
    return view('site/post/show',compact('post','comments','count'));
}

کنترلر کامنت

public function store(Request $request,Post $post)
{
    $this->validate($request,[
        'website' => 'nullable|active_url',
        'comment' => 'required|min:۵'
    ]);

    $comment = new Comment();
    $comment->user_id = Auth::user()->id;
    $comment->name = Auth::user()->fname;
    $comment->email = Auth::user()->email;
    $comment->website = $request->website;
    $comment->body = $request->comment;

    $post->comments()->save($comment);
    Session::flash('success', 'Comment Send Successfully');

    return back();
}

public function reply(Request $request,Comment $comment)
{
    $this->validate($request,[
        'website' => 'nullable|active_url',
        'replyComment' => 'required|min:۵'
    ]);

    $reply = new Comment();
    $reply->user_id = Auth::user()->id;
    $reply->name = Auth::user()->fname;
    $reply->email = Auth::user()->email;
    $reply->website = $request->website;
    $reply->body = $request->replyComment;

    $comment->comments()->save($reply);
    Session::flash('success', 'Comment Replyed Successfully');

    return back();
}

مدل کامنت

protected $fillable = [
    'parent_id', 'user_id', 'post_id', 'name', 'email', 'website', 'body', 'approved'
];

public function user()
{
    return $this->belongsTo(User::class);
}

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

public function commentable()
{
    return $this->morphTo();
}

public function comments()
{
    return $this->morphMany(Comment::class,'commentable');
}

مدل پست

    use Sluggable;
protected $fillable = [
    'title','slug', 'body', 'views', 'category_id', 'user_id'
];

public function user()
{
    return $this->belongsTo(User::class);
}

public function categories()
{
    return $this->belongsToMany(Category::class,'post_category');
}

public function tags()
{
    return $this->belongsToMany(Tag::class);
}

public function comments()
{
    return $this->morphMany(Comment::class,'commentable');
}

مایگریشن کامنت

Schema::create('comments', function (Blueprint $table) {
            $table->increments('id');
            $table->unsignedInteger('user_id')->default(۰);
            $table->string('name');
            $table->string('email');
            $table->string('website')->nullable();
            $table->text('body');
            $table->boolean('approved')->default(false);
            $table->unsignedInteger('commentable_id');
            $table->string('commentable_type');
            $table->timestamps();
        });

چند روزه درگیره اینم نمیدونم چیکار کنم!(
مرسی

بهترین پاسخ انتخاب شده توسط مرتضی صبیحی
آفلاین
user-avatar
حسام موسوی
2 سال پیش

کد زیر

 @foreach($comment->comments as $reply)

میشه به این شکل

@foreach($comment->comments()->where('approved' , 1)->get() as $reply)
آفلاین
user-avatar
حسام موسوی ( 382959 تجربه )
2 سال پیش
تخصص : طراح و برنامه نویس

بدلیل اینکه زمانی که در view میخواید کامنت های فرزند رو هم با رابطه برگردونید باید از یک where استفاده کنید تا فقط فرزندانی که approved اون true هست رو براتون برگردونه

آفلاین
user-avatar
مرتضی صبیحی ( 9846 تجربه )
2 سال پیش
تخصص : (VueJs) Front-end developer

مرسی از راهنماییتون
ولی چجوری این کاری که گفتین رو انجام بدم؟
میشه کدشو بدین؟
ممنون میشم

آفلاین
user-avatar
حسام موسوی ( 382959 تجربه )
2 سال پیش
تخصص : طراح و برنامه نویس

شما کد اون قسمتی که فرزندن های یک کامنت رو بر میگردونید قرار بدید تا بگم به چه شکلیه داستان .

آفلاین
user-avatar
مرتضی صبیحی ( 9846 تجربه )
2 سال پیش
تخصص : (VueJs) Front-end developer

@hesammousavi


            <div class="single-comment">
                <div class="media">
                    <div class="media-left text-center">
                        <img class="media-object" src="/assets/images/reply-1.jpg" alt="">
                    </div>
                    <div class="media-body">
                        <div class="media-heading">
                            <h3 class="text-uppercase">
                                {{ $comment->name }}

                                <a href="#" class="pull-right reply-btn" data-toggle="modal"
                                   data-target="#replyModal{{ $comment->id }}">reply</a>

                            </h3>
                        </div>
                        <p class="comment-date">
                            {{ $comment->created_at }}
                        </p>
                        <p class="comment-p">
                            {{ $comment->body }}
                        </p>
                    </div>
                </div>
            </div>
            @foreach($comment->comments as $reply)
                <div class="single-comment single-comment-reply">
                    <div class="media">
                        <div class="media-left text-center">
                            <img class="media-object" src="/assets/images/reply-2.jpg" alt="">
                        </div>
                        <div class="media-body">
                            <div class="media-heading">
                                <h3 class="text-uppercase">{{ $reply->name }}</h3>
                            </div>
                            <p class="comment-date">
                                {{ $reply->created_at }}
                            </p>
                            <p class="comment-p">
                                {{ $reply->body }}
                            </p>
                        </div>
                    </div>
                </div>
            @endforeach```
آفلاین
user-avatar
حسام موسوی ( 382959 تجربه )
2 سال پیش
تخصص : طراح و برنامه نویس

کد زیر

 @foreach($comment->comments as $reply)

میشه به این شکل

@foreach($comment->comments()->where('approved' , 1)->get() as $reply)
آفلاین
user-avatar
امیر علیزاده ( 498 تجربه )
2 سال پیش
تخصص : توسعه دهنده بک اند

خیلی زیاد پیشنهاد میکنم از
global scope
استفاده کنی
https://laravel.com/docs/5.6/eloquent#global-scopes

برای ارسال پاسخ باید وارد سایت شوید