Paradox
1 سال پیش توسط Paradox مطرح شد
6 پاسخ

لایک و انلایک کاربران

سلام من میخام برای کاربران سایتم مثل ویژگی لایک و انلایک اضافه کنم که هر کاربر بتونه کاربران مختلف رو با لایک و جزء کاربران محبوب انتخاب کنه
مشکلی که دارم وقتی روی دکمه favorite کاربر مثلا ایدی 2 میزنم تو دیتابیس ثبت میشه ولی تو ظاهر بلید تغییری نمیکنه ولی وقتی روی دکمه favorite ایدی که خودم لاگین کردم میزنم هم تو دیتابیس ثبت میشه هم تو بلید ظاهرش تغییر میکنه

و وقتی unfavorite میکنم ارور زیر دارم

Call to a member function delete() on null

جدول

 Schema::create('favorites', function (Blueprint $table) {
            $table->id();
            $table->foreignId('user_id')->constrained()->cascadeOnDelete();
            $table->boolean('favorite')->default(0);
            $table->timestamps();
        });

روت

    Route::get('/profile/favorite/{favorite}' , [IndexController::class , 'favorite'])->name('favorite');
    Route::get('/profile/unfavorite/{favorite}' , [IndexController::class , 'unFavorite'])->name('unFavorite');

کنترلر

    public function favorite(Request $request , User $favorite)
    {

       Favorite::create([
        'favorite' => 1 ,
        'user_id' => $favorite->id,
       ]);

       return back();
    }

    public function unFavorite(User $favorite)
    {
       $favorite = Favorite::where('id' , $favorite->id)->where('user_id' , Auth::id())->first();

       $favorite->delete();
       return back();
    }

مدل یوزر
اینجا این تابع که تو مدل user نوشتم فکر میکنم مشکل داره که نمیدونم چطور بنویسم

      public function favorites()
    {
       return $this->hasMany(Favorite::class);
    }

    public function is_favorite_by_auth_user()
    {
        $id = Auth::id();
        $favorites = array();

        foreach($this->favorites as $favorite):

            array_push($favorites , $favorite->user_id);

        endforeach;

        if(in_array($id , $favorites))
        {
            return true;
        }
        else
        {
            return false;
        }
    }

مدل favorite

    protected $fillable = [
        'user_id', 'favorite'
    ];

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

بلید

   @if ($user->is_favorite_by_auth_user())
                            <a href="{{ route('profile.unFavorite' , $user->id ) }}" data-toggle="tooltip" data-placement="top" >
                                <i class="fa fa-star text-warning"></i>
                            </a>
                            @else
                            <a href="{{ route('profile.favorite' , $user->id ) }}" data-toggle="tooltip" data-placement="top" >
                                <i class="fa fa-star text-black"></i>
                            </a>
                        @endif

لطفا راهنمایی کنید ممنون


ثبت پرسش جدید
ابوالفضل
تخصص : برنامه نويس
@amata 1 سال پیش مطرح شد
-1

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


Paradox
تخصص : در حال یادگیری
@paradox 1 سال پیش آپدیت شد
0

@alekasirabolfazl
چیزی که من میخام هر کاربر بتونه کاربران مختلفی رو به عنوان کاربران مورد علاقه انتخاب کنه
ای کاش فقط بخاطر گرفتن امتیاز پاسخ ثبت نکنید :)


عرفان
تخصص : هیچ
@erfanwmb 1 سال پیش مطرح شد
0

ببین چندتا موضوع هستش
وقتی تو میخوای هر نفر بتونه نفر دیگه رو لایک یا دیسلاک کنه تو جدولی که ساختی برای لایک شدن رو باید اولا آی دی فردی که لایک میشه رو نگه داری و هم آی دی طرفی که لایک کرده
ینی میخوام بگم بهت یه جدول 3 ستونه داری که یه ستون شماره لایک کرده/یه ستون شماره لایک شده/یه ستون هم لایک که میشه مثلا عدد 1 و دیسلایک که میشه عدد-1
حالا چرا میگم هم لایک شده رو سیو کنی هم لایک کننده
برای اینکه هر نفر بتونه فقط یه بار یکی دیگه رو لایک یا دیسلاک کنه/نشه جوری که یه نفر بیاد و 100 بار یکی دیگه رو لایک کنه و هر دفعه هم امتیازش ثبت بشه

حالا اینکه طرف همون موقع که لایک میکنه آیکون لایک شده نمایش داده بشه و وقتی که لایکش رو برمیداره آیکون تغییر کنه تو باید برای اون دکمه لایک و دیسلاک ajax تعریف کنی یا اگر نمیخوای ajax بزنی صفحه برات رفرش میشه


Paradox
تخصص : در حال یادگیری
@paradox 1 سال پیش مطرح شد
0

@erfanwmb
سلام
به چه شکل ایدی فردی که لایک شده رو بگیرم

مثلا این شکلی ؟

            $table->boolean('favorite')->default(0);
$table->foreignId('user_id')->constrained()->onDelete('cascade');
            $table->foreignId('favorite_user_id')->constrained('users','id')->onDelete('cascade');

بله دقیقا میخام با ajax باشه
آموزشی هست که دقیقا به این شکل برای کاربران باشه؟
خودم هرچی سرچ زدم برای مقاله و پست و کامنت بوده و نتونستم به جواب برسم


عرفان
تخصص : هیچ
@erfanwmb 1 سال پیش مطرح شد
0

آره
فقط میمونه روابط مدل ها که بنویسی برای دسترسی سریع تر و بهتر به کارت میاد شدیدااا

ببین کلیت ajax خیلی سخت و پیچیده نیست تو روی آیکونی یا المنت HTML که میخوای کاربر بعد از لایک استفاده کنه باید onclick بزاری به یه فانکشن js که داخل اون فاکشن با استفاده از دستور ajax مقادیر رو بفرستی توی کنترلر برای انجام عملیات بزار یه نمونه بهت نشون بدم

 <a class="wishlist" id="wishlistButton{{$product->id}}"  @auth onclick="addWishlistShop(event,'{{$product->id}}','{{$product->name}}','{{$product->price}}','{{str_replace('public','/storage',optional($product->gallery)->path)}}')" @endauth @guest onclick="snackBarFunction()" @endguest   href="#wishlistButton">

مثلا من توی کد بالا داخل یه foreach آم برا نمایش یه بخشی از محصولاتم
من اومدم اینجا گفتم اگر کاربر لاگین باشه یه تابعی ساختم توی js و بهش event و ای دی محصول و اسمشو و سایر مشخصات محصول رو دادم به اون تابع در js .

function addWishlistShop(event, id,name,price,image) {
    //
    $.ajaxSetup({
        headers : {
            'X-CSRF-TOKEN' : document.head.querySelector('meta[name="csrf-token"]').content,
            'Content-Type' : 'application/json'
        }
    })

    //
    $.ajax({
        type : 'POST',
        url : '/wishlist/add/',
        data : JSON.stringify({
            id : id ,
            // cart : cartName,
            _method : 'post'
        }),
        success : function(res) {

حالا تابع Js رو برات نوشتم که میگه این اطلاعاتی که گرفتم رو ببر مثلا به این url یا همون route خودمون و متدش پست هست و فلان و داخل اون route وصل میشه به کنترل من که اونجا میام و اطلاعاتم رو ذخیره میکنم و success آخر این تابع در js میگه اگر نتیجه با موفقیت انجام شد باید حالا بیام ایکون مثلا لایکم که سفید بوده رو قرمز کنم و این حرفا


Paradox
تخصص : در حال یادگیری
@paradox 1 سال پیش مطرح شد
0

@erfanwmb
من کدهامو میزارم میشه بررسی کنید تا اینجا درسته یا غلط؟
جدولم

 Schema::create('favorites', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->boolean('favorite')->default(0);
            $table->foreignId('user_id')->constrained()->onDelete('cascade');
            $table->foreignId('favorite_user_id')->constrained('users','id')->onDelete('cascade');
            $table->timestamps();
        });

مدل یوزر

    public function favorites()
    {
       return $this->hasMany(Favorite::class);
    }

مدل favorite

    protected $fillable = [
       'favorite' , 'user_id', 'favorite_user_id'
    ];

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

بلید

  < href="#" @auth onclick="addFavorite(event,'{{$user->id}}')" @endauth>
                                <i class="fa fa-star text-black"></i>
                            </a>

ایجکس

       function addFavorite(event, id)
        {
            $.ajaxSetup({
                headers : {
                    'X-CSRF-TOKEN' : document.head.querySelector('meta[name="csrf-token"]').content,
                    'Content-Type' : 'application/json'
                }
            })

            //
            $.ajax({
                type : 'POST',
                url : '/peoples/favorite/',
                data : JSON.stringify({
                    id : id ,
                    _method : 'post'
                }),
                success : function(res) {
                    // چطوری بگم رنگشو تغییر بده
                }

            });
        }

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

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