سلام دوستان
در لاراول برای ایجاد سیستم فالو کاربران مایگریشن زیر رو برای ثبت اطلاعات فالورها ایجاد کردم :
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 که با کلیک کردنش ایشون هم اونو فالو کنه
ممنون میشم کمک کنید
سپاسگذارم
@hesami13
کار ساده ای هست. شما کافیه کا با استفاده از auth()->id()
آیدی شخصی که لاگین کرده رو دریافت کنید بعد با یک کوئری چک کنید که این آیدی ، آیدی شخص دوم رو فالو کرده یا نه. ( یعنی تعداد فالو اگر 1 بود یعنی فالو کرده درغیر این صورت فالو نکرده. ) نیازی به اضافه کردن فیلد به دیتابیس نیست
@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 برامون در ستون مجازی اشتولید کنه
سلام ،
من فکر نمیکنم نیازی به کوئری نویسی تو در تو باشه !
ببینید شما قرار است یک نفر رو فالو کنید پس id یا user_id اون شخص رو دارین ( برای مثال در متغیری به نام profileId$ )
حالا کاری که انجام میدین قبل از create کردن اینو چک کنین :
User::find($profileId)->followers()->where('followed_id' , Auth::user->id)->count();
اگر مقدارش یک بود یعنی اون شخص هم شما رو دنبال میکنه و موقع create مقدار status رو برابر با یک قرار بدین در غیر این صورت صفر !
البته نمیدونم orm رو درست نوشتم یا نه ، به عنوان شبه کد استفاده کنین
@hamedk9776 عزیز
بحث ما این نیست که چطور فالور جدیدی ثبت کنیم ، بحث اینه که چطور وقتی لیستی از فالورهای یک شخص رو استخراج میکنیم ، علاوه بر ستونهای اطلاعاتی شخص فالور ، یک ستون هم باشه که وضعیت فالو ایشان توسط مارو نشون بده
در مثال زیر نتیجه یک کوئری select رو میبینید که اسامی فالورهای من رو نمایش میده و یک ستون هم اضافه شده بنام isFollowing که نشون میده آیا من هم این شخص رو فالو کرده ام یا نه:
{
"uid": 3,
"fname": "حسین",
"lname": "باقری",
"isFollowing": 1
},
{
"uid": 2,
"fname": "علیرضا",
"lname": "احمدی",
"isFollowing": 1
}
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟