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

اضافه کردن دیتا به ریلیشن

دوستان این امکان وجود داره که وقتی یه ریلیشن رو با with میگیریم،بشه داخلش چیزی رو چک کرد و اگه شرط برقرار بود یه دیتا اضافه کنه

مثلا،وقتی پیام های یه گفتگو رو میگیریم،بشه داخل فانکشن with یه شرطی رو بررسی کرد

$conversations = Conversation::with(['messages' => function($query){

    }])->get();

ثبت پرسش جدید
smart
@smartgarden2016 5 سال پیش مطرح شد
1

بله. با whereHas میشه این کارو کرد.
مثلا پیام های فعال یه گفتگو رو بخوایم بگیریم:

$conbersations = Conversation::whereHas('messages', function($q){
    $q->where('active', true);
})->get();

webazin webazin
@webazin.org90 5 سال پیش آپدیت شد
0

بله،ولی میخوام شرط بذارم و اگه ظرط برقرار بود یه دیتا اضافه کنم به کالکشن
@smartgarden2016


webazin webazin
@webazin.org90 5 سال پیش آپدیت شد
0

این مشکل رو به این شکل حل کردم، یه اتریبیوت اپند کردم و توی اکسسور رابطه زدم و حل شد،حالا یه مشکل دیگه هست که میخوام براساس این اتریبیوتی که اپند کردم سورت کنه،ولی سورت نمیکنه

protected $appends = ['unreadMessage'];
...
public function getUnreadMessageAttribute(  ) {
        return $this->messages()->latest()->first()->role == 'user' ? 1 : 0;
    }

......

$conversations = Conversation::withCount('messages')->get()->sortByDesc('unreadMessage');

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


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

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