یک نکته: Yii در relations پارامترهای خیلی زیادی داره. برای مثال، یکی از این پارامترها together هست. اگه این پارامتر رو true بگذاریم، باعث میشه حتماً از Join استفاده بشه و تمام اطلاعات با یک کوئری از دیتابیس استخراج بشن ولی اگه false بگذاریم، خودش بطور خودکار دو کوئری جداگانه ارسال میکنه. برای مطالعه امکانات کامل Active Record Relations در Yii توصیه میکنم این لینک رو حتماً ببینید. بعید میدونم Eloquent لاراول اینقدر منعطف و کامل باشه. برای اینکه کاربرد with رو هم متوجه بشین، اجازه بدین یکم توضیح بدم:
با کمک with به Yii میگیم که از حالت Lazy Loading به Eager Loading بره. در حالت معمول، ما برای اینکه مثلاً سه پست اخیر رو همراه با کامنتهاشون در بیاریم، اینطوری مینویسیم:
$posts = Post::model()->recently(3)->findAll();
foreach($posts as $post) {
...
foreach($post->comments as $comment) {
...
}
}
در این حالت، اول با یک کوئری سه پست اخیر استخراج میشن و داخل حلقه اول، برای هر پست، وقتی post->comments$ رو صدا میزنیم، یک کوئری دیگه زده میشه و کامنتها دوباره استخراج میشه. اما اگه بگیم:
$posts = Post::model()->recently(3)->with('comments')->findAll();
foreach($posts as $post) {
...
foreach($post->comments as $comment) {
...
}
}
همون اول، با یک Join سه پست اخیر همراه با Commentهاشون از دیتابیس استخراج میشه.