محمد
3 سال پیش توسط محمد مطرح شد
3 پاسخ

سیستم لایک در لاراول

سلام دوستان
من برای مقالات می خوام سیستم لایک و دیس لایک درست کنم و فقط کاربران لاگین شده باشن
یک table به نام likes درست کردم و ستون های user_id و blog_id هرکدوم رابطه یک به چند با user و blog دارن

        Schema::create('likes', function (Blueprint $table) {
            $table->unsignedBigInteger('blog_id');
            $table->foreign('blog_id')->references('id')->on('blogs')->onDelete('cascade');

            $table->unsignedBigInteger('user_id');
            $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');

            $table->unique(['blog_id' , 'user_id']);
        });

تو مدل هم روابط رو درست کردم

class Like extends Model
{
    use HasFactory;
    protected $fillable = [ 'blog_id' , 'user_id'];

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

    public function blog()
    {
        return $this->belongsTo(Blog::class);
    }

}

حالا در کامپوننت لایو وایر اول چک کردم که لاگین کرده یا نه
بعد می خوام چک کنم اگه قبلا لایک کرده بود لایک کم بشه و اگر نه یک لایک اضافه بشه ولی اینو نمیدونم چجوری انجام بدم
کد کامپوننت

class AllBlogs extends Component
{
    public function addLike($id)
    {
        if (Auth::user()) {

            $blog = Blog::findOrFail($id);

        }else{
            alert()->error('برای لایک باید وارد سایت شوید');
        }
    }
    public function render()
    {

        $blogs= Blog::with('likes')->paginate(3);
        return view('livewire.all-blogs' , compact('blogs'))->layout('user.layouts.mater');
    }
}

الان در متد addLike نمیدونم چیکار کنم
ممنون میشم راهنمایی کنید
@mohaligateway
@Rp76
@juza66
@ali.bayat
@hesammousavi


ثبت پرسش جدید
سبحان مولایی
تخصص : برنامه‌نویس وب: Python ::...
@websaz 3 سال پیش مطرح شد
0

سلام از این کد استفاده کنید.

class AllBlogs extends Component
{
    public function addLike($id)
    {
        if (Auth::user()) {

            $blog = Blog::findOrFail($id);
            $like = Like::where('blog_id',$id)->where('user_id',auth()->user()->id)->first();
            if ($like) 
                $like->delete();
            else {
                $like = Like::create(['blog_id'=>$id,'user_id'=>auth()->user()->id]);
            }
        }else{
            alert()->error('برای لایک باید وارد سایت شوید');
        }
    }
    public function render()
    {

        $blogs= Blog::with('likes')->paginate(3);
        return view('livewire.all-blogs' , compact('blogs'))->layout('user.layouts.mater');
    }
}

@mrn


محمد
تخصص : Laravel
@mprogrammer7 3 سال پیش مطرح شد
2

@websaz
لایک درست کار میکنه ولی دیس لایک ارور میده

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'id' in 'where clause' (SQL: delete from `likes` where `id` is null)

محمد
تخصص : Laravel
@mprogrammer7 3 سال پیش مطرح شد
3

به جای

    $like->delete();

اینو گزاشتم درست شد

$blog->likes()->where('user_id' , \auth()->user()->id)->delete();

خیلی ممنون
@websaz


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

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