مرتضی صبیحی
6 سال پیش توسط مرتضی صبیحی مطرح شد
6 پاسخ

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

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

کنترلر پست متود 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();
        });

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


ثبت پرسش جدید
حسام موسوی
تخصص : طراح و برنامه نویس
@hesammousavi 6 سال پیش مطرح شد
1

کد زیر

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

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

@foreach($comment->comments()->where('approved' , 1)->get() as $reply)

حسام موسوی
تخصص : طراح و برنامه نویس
@hesammousavi 6 سال پیش مطرح شد
0

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


مرتضی صبیحی
تخصص : Front-end developer
@mortezasabihi 6 سال پیش مطرح شد
0

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


حسام موسوی
تخصص : طراح و برنامه نویس
@hesammousavi 6 سال پیش مطرح شد
0

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


مرتضی صبیحی
تخصص : Front-end developer
@mortezasabihi 6 سال پیش مطرح شد
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```

حسام موسوی
تخصص : طراح و برنامه نویس
@hesammousavi 6 سال پیش مطرح شد
1

کد زیر

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

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

@foreach($comment->comments()->where('approved' , 1)->get() as $reply)

امیر علیزاده
تخصص : توسعه دهنده بک اند
@amiralizadeh9480 6 سال پیش مطرح شد
0

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


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام