باسلام
این کد رو ببنید : مربوط به مدل post هست
public function relations()
{
return array(
'comments' => array(self::HAS_MANY, 'Comment', 'post_id',
'together'=>false),
);
}
وقتی together رو false گذاشتیم ، دقیقا چه کاری انجام میشه؟
باعث میشه Join زده نشه و وقتی شما ارتباط comments رو از یک شئ (مثلاً post$) درخواست کنید، همون موقع یه کوئری دیگه برای استخراج اطلاعات کامنتها اجرا بشه. اینطوری در مصرف حافظه صرفه جویی میشه.
یعنی بهتره همیشه از این روش استفاده کنیم برای بهبود پرفورمنس و کاهش مصرف حافظه ؟
یا مواقعی که کمتر داریم از ریلیشن ها استفاده میکنیم این روش رو بکار ببریم؟
در کل نظر شما راجع به این روش چیه؟
کلاً پیشفرض together خودش false هست که بهش میگن Lazy Loading یعنی تا وقتی به اطلاعات نیاز پیدا نکردین، توی حافظه بارگذاری نمیشن ولی بعضی وقتها لازم دارین که حتماً از Join استفاده بشه. مثلاً وقتی که میخواین پستها رو همراه با 5 کامنت آخر بارگذاری کنید. خوب اینجا باید حتماً Join زده بشه تا بتونین روی کامنتها Limit بگذارین (اگه توی کوئری جداگانه باشه Limit اجرا نمیشه) و به پستها اعمال میشه نه به کامنتها. اینجا باید together رو با true مقداردهی کنید.