PDA

View Full Version : سوال در ارتباط با نحوه کد نویسی برا ی جداول میان رابطه ای



jionelmessi
شنبه 23 اسفند 1393, 11:44 صبح
باسلام
بنظر دوستان و استید بهتره برا ی این جداول ما یه اکتیو رکور بسازیم یا نه با command bulder و. ساخت یکسری متندها اینکارارو انجام بدیم؟
کدوم استاندارد تره

MMSHFE
شنبه 23 اسفند 1393, 11:56 صبح
تا جایی که بشه بهتره از امکانات فریمورک مثل 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 نداریم (پردازش سبکتر)

jionelmessi
شنبه 23 اسفند 1393, 12:41 عصر
خودمم active record بیشتر ترجیح مدم چون اونجوری باس متد های مختلفی بنویسیم تا استخراجای متفاوت کنه ممنون

jafaripur
شنبه 23 اسفند 1393, 21:56 عصر
طی تجربه خودم اصلاً نمی شه گفت کدوم بهتره. هر کدوم جای خودش را داره. به عنوان مثال برای کوئری های پیچیده Geolocating نمی شه از ORM استفاده کرد.