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

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

لینک کوتاه اشتراک گذاری

0

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

کنترلر پست متود 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
حسام موسوی
3 سال پیش

کد زیر

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

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

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

لینک کوتاه اشتراک گذاری

0

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

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

لینک کوتاه اشتراک گذاری

0

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

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

لینک کوتاه اشتراک گذاری

0

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

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

لینک کوتاه اشتراک گذاری

0

@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
حسام موسوی ( 473799 تجربه )
3 سال پیش
تخصص : طراح و برنامه نویس

لینک کوتاه اشتراک گذاری

1

کد زیر

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

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

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

لینک کوتاه اشتراک گذاری

0

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

برای ارسال پاسخ لازم است، ابتدا وارد سایت شوید.