تا جایی که بشه بهتره از امکانات فریمورک مثل Relational AR استفاده کنید مگه اینکه مطمئن بشین داره به Performance آسیب میزنه. من خودم در اکثر جاها با همین اکتیورکورد کار میکنم. حتی در جاهایی که پرفورمنس داره خراب میشه هم میشه از این جدولهای واسطه استفاده مفید کرد. مثلاً من میام خودم توی مدلهای اصلی relationهای جدول واسط رو هم از نوع HAS_MANY تعریف میکنم و بعد با کمک اونها رکوردها رو استخراج میکنم. برای مثال این کد رو ببینید:
$photos = Photos::model()->findAll('confirmed=1');
foreach($photos as $photo) {
// ...
foreach($photo->tags as $tag) {
if($tag->confirmed) {
// ...
}
}
}
خوب ممکنه فرضاً تعداد زیادی از رکوردها confirmed با مقدار 0 داشته باشن و درنتیجه Performance داره با این روش پایین میاد. اینجا من میام این شکلی کار میکنم:
$photos = Photos::model()->with('tags'=>array(
'condition'=>'tags.confirmed=1',
))->findAll('t.confirmed=1');
foreach($photos as $photo) {
// ...
foreach($photo->tags as $tag) {
// ...
}
}
اینجا همون اول تگهایی که confirmed اونها 0 هست توی حافظه نمیان (مصرف کمتر حافظه) و دیگه نیاز به if نداریم (پردازش سبکتر)