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

- 1 هفته پیش
توسط webazin webazin آپدیت شد
webazin webazin ( 600 تجربه )
1 هفته پیش

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

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

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

    }])->get();
smart ( 6620 تجربه )
1 هفته پیش

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

$conbersations = Conversation::whereHas('messages', function($q){
    $q->where('active', true);
})->get();
webazin webazin ( 600 تجربه )
1 هفته پیش

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

webazin webazin ( 600 تجربه )
1 هفته پیش

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

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

......

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

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

برای ارسال پاسخ باید وارد سایت شوید