راکت

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

3 پاسخ

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

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

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

    }])->get();
ثبت پرسش جدید

پاسخ‌ها

3
smart
smart
@smartgarden2016

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

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

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

شاید پاسخ شما همین‌جا باشد

webazin webazin
webazin webazin
@webazin.org90

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

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

......

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

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

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

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