مهدی
6 سال پیش توسط مهدی مطرح شد
4 پاسخ

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

سلام دوستان
در لاراول برای ایجاد سیستم فالو کاربران مایگریشن زیر رو برای ثبت اطلاعات فالورها ایجاد کردم :

Schema::create('followers', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->bigInteger('user_id')->unsigned();
            $table->bigInteger('followed_id')->unsigned();
            $table->timestamps();

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

درون مدل User فانکشن زیر رو نوشتم:

public function followers() {  
return $this->belongsToMany(User::class, 'followers', 'followed_id', 'user_id')->withTimestamps();  
}

و برای برگرداندن لیست فالورها از دستور زیر در کنترلر خودم استفاده میکنم :

$followers = User::find(Auth::user()->id)->followers()->where('followers.status',1)->paginate(10,['users.id','fname','lname','username','avatar',]);

همه چیز درست کار میکنه و لیست به این شکل برام نمایش داده میشه :

"status": 107,
    "message": "لیست پیگیری کنندگان با موفقیت ایجاد شد.",
    "avatar_base_uri": "http://mydomain/storage/",
    "followers": {
        "current_page": 1,
        "data": [
            {
                "id": 2,
                "fname": "محسن",
                "lname": "احمدی",
                "username": null,
                "avatar": "images/avatar/avatar-no.svg"
            }
        ],
        "first_page_url": "http://mydomain/api/v1/GetUserFollowers?page=1",
        "from": 1,
        "last_page": 1,
        "last_page_url": "http://mydomain/api/v1/GetUserFollowers?page=1",
        "next_page_url": null,
        "path": "http://mydomain/api/v1/GetUserFollowers",
        "per_page": 10,
        "prev_page_url": null,
        "to": 1,
        "total": 1
    }

ولی قصد دارم در لیست فالورها در کنار نام و مشخصات کاربر و بعد avatar یک ستون هم اضافه بشه که مشخص کنه آیا ایشان هم کاربر رو فالو میکنه یا خیر ، حالا به چه شکلی این کارو باید انجام داد سئوال اصلی من هست

میخوام دقیقا مشابه اینستاگرام در مقابل اسامی دنبال کنندگان بتونم متن دکمه در دو وضعیت نمایش بدم :
اگر ایشون هم کاربری که دنبالش میکنه رو فالو کرده روی کپشن دکمه بنویسم Following و اگر هم ایشون اون کاربر دنبال کننده اش رو دنبال نکرده کپشن دکمه باشه Follow که با کلیک کردنش ایشون هم اونو فالو کنه
ممنون میشم کمک کنید
سپاسگذارم


ثبت پرسش جدید
محسن بستان
تخصص : Senior Backend Developer
@mohsenbostan 6 سال پیش آپدیت شد
0

@hesami13
کار ساده ای هست. شما کافیه کا با استفاده از auth()->id() آیدی شخصی که لاگین کرده رو دریافت کنید بعد با یک کوئری چک کنید که این آیدی ، آیدی شخص دوم رو فالو کرده یا نه. ( یعنی تعداد فالو اگر 1 بود یعنی فالو کرده درغیر این صورت فالو نکرده. ) نیازی به اضافه کردن فیلد به دیتابیس نیست


مهدی
@mehdi13 6 سال پیش آپدیت شد
0

@mohsenbostan ممنونم ولی موضوع اینه که در یک کوئری میخوام بگیرم اینارو و یک ستون هم در حین اجرای کوئری به ستونهای پایه اضافه بشه و وضعیت فالو کردن اون کاربر هم مشخص بشه :

    $followers = User::find(Auth::user()->id)->followers()->where('followers.status',1)->paginate(10,['users.id','fname','lname','username','avatar','isFollowing']);

یعنی میخوام ستون isFollowing هم اضافه بشه و وضعیت فالو بودن اون کاربر توسط این کاربر رو هم مشخص کنه
چنین ستونی نه در جدول users نه در جدول followers وجو ندارد و من بصورت فرضی نوشتم و سئوالم دقیقا همینه که اون ستون رو چطور باید به ستونهای کوئری اضافه کرد و بصورت یک کوئری تو در تو نوشت تا یک مقدار 0 یا 1 برامون در ستون مجازی اشتولید کنه


حامد کوهستانی
تخصص : web developer
@hamedk9776 6 سال پیش آپدیت شد
0

سلام ،
من فکر نمیکنم نیازی به کوئری نویسی تو در تو باشه !
ببینید شما قرار است یک نفر رو فالو کنید پس id یا user_id اون شخص رو دارین ( برای مثال در متغیری به نام profileId$ )
حالا کاری که انجام میدین قبل از create کردن اینو چک کنین :

User::find($profileId)->followers()->where('followed_id' , Auth::user->id)->count();

اگر مقدارش یک بود یعنی اون شخص هم شما رو دنبال میکنه و موقع create مقدار status رو برابر با یک قرار بدین در غیر این صورت صفر !
البته نمیدونم orm رو درست نوشتم یا نه ، به عنوان شبه کد استفاده کنین


مهدی
@mehdi13 6 سال پیش آپدیت شد
0

@hamedk9776 عزیز
بحث ما این نیست که چطور فالور جدیدی ثبت کنیم ، بحث اینه که چطور وقتی لیستی از فالورهای یک شخص رو استخراج میکنیم ، علاوه بر ستونهای اطلاعاتی شخص فالور ، یک ستون هم باشه که وضعیت فالو ایشان توسط مارو نشون بده
در مثال زیر نتیجه یک کوئری select رو میبینید که اسامی فالورهای من رو نمایش میده و یک ستون هم اضافه شده بنام isFollowing که نشون میده آیا من هم این شخص رو فالو کرده ام یا نه:

        {
            "uid": 3,
            "fname": "حسین",
            "lname": "باقری",
            "isFollowing": 1
        },
        {
            "uid": 2,
            "fname": "علیرضا",
            "lname": "احمدی",
            "isFollowing": 1
        }

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

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