توسعه و مدیریت دیتابیس
#1
Posted 07 March 2013 - 02:51 AM
#2
Posted 07 March 2013 - 07:05 AM
Manee, on 07 March 2013 - 02:51 AM, said:
توی مدل باید به تابع
rules
این فیلد رو اضافه کنی
و همینطور به تابع
attributeLabels
هم باید اضافه کنید واگه در توابع جستجو و گریدهاتون هم ازش استفاده میکنید و قصد استفاده از فیلترها رو روی این فیلد دارید باید به تابع هایی مانند
search
هم اضافه کنید
البته برای حل ریشه ایه این مشکل یه راه خیلی قشنگ هست که اینجا فرصت مطرح کردنش نیست . اگه علاقمند بودی بهم بگو تا برات توضیح بدم
#4
Posted 09 March 2013 - 05:00 AM
mereeelin, on 07 March 2013 - 07:05 AM, said:
البته برای حل ریشه ایه این مشکل یه راه خیلی قشنگ هست که اینجا فرصت مطرح کردنش نیست . اگه علاقمند بودی بهم بگو تا برات توضیح بدم
بابا دوست عزیز این چه حرکتیه. لطفا توضیح بدید دیگه...
www.shgn.ir/yii-framework/
yii2.swsco.ir
In a world without any fences or walls,Who needs Gates or Windows!
#5
Posted 11 March 2013 - 08:12 AM
Shahcheraghean, on 09 March 2013 - 05:00 AM, said:
بابا دوست عزیز این چه حرکتیه. لطفا توضیح بدید دیگه...
سلام
ببخشید من نبودم
ببینید اگه میخواین با مشکل اضافه کردن فیلد به مدلهاتون راحت تر روبه رو بشید یه راه حل وجود داره اونم اینه :
داخل پوشه مدل ها یک پوشه جدید بسازید با نام
base
فرض کنید یه جدول داریم به نام
tbl_post
که می خوایم از روش مدل بسازیم، مدل رو که ساختید یه کپی ازش بگیرید و تغییر نام بدهید(هم اسم فایل و هم اسم کلاس داخل فایل) و با نام
PostBase
در داخل پوشه بیس قرار دهید .حالا فایل اصلی پست را باز کرده و به جای اینکه آن را از اکتیورکورد اکتند کنید آن را از
PostBase
اکستند نمایید و تمام توابع بجز تابع مدل را پاک کنید .کلاس شما همچین شکلی پیدا می کند
class Post extends PostBase
{
/**
* Returns the static model of the specified AR class.
* @return Product the static model class
*/
public static function model($className=__CLASS__)
{
return parent::model($className);
}
}
از این به بعد شما به
PostBase
کاری نخواهید داشت و تمام توابع خود را در مدل پست بنویسید و اگر نیاز داشتید می توانید توابع موجود در بیس را در این مدل با همان نام ها باز نویسی کنید
با این کار شما هر زمان به جدول هایتان چیزی اضافه کنید دیگر نیازی نیست نگران تداخلش با کدهای قبلی باشید خیلی راحت آن مدل را با
gii
تولید کنید و فایل تولید شده را پس از تغییر نام به جای فایلی که در پوشه بیس قرار دارد بگذارید .
فقط یادتان باشد که در بخش کانفیگ فایل
main.php
در بخش
import
جایی که مدل ها را صدا می زنیم مدل های داخل پوشه بیس را هم صدا بزنید مانند :
...
'import'=>array(
'application.models.base.*',
'application.models.*',
...
#6
Posted 12 March 2013 - 02:36 AM
اما یه سوال. یه جورایی توی برنامه تعداد فایلها خیلی زیاد نمی شوند؟
مدیریتشون خیلی سخت نمیشه؟
کما که توی این حالت هم اعمال تغییرات ممکنه سخت باشه.
غیر از این هم راه دیگری وجود دارد؟
www.shgn.ir/yii-framework/
yii2.swsco.ir
In a world without any fences or walls,Who needs Gates or Windows!
#7
Posted 12 March 2013 - 05:49 AM
#8
Posted 12 March 2013 - 09:23 AM
اینطوری دیگه با هر تغییر در دیتابیس نیاز به تغییر در کل کلاسها نیست. کلاس های ساخته شده با gii که جای دیگه هستند و شما روی کلاسهایی تغییرات را اعمال می کنید که خودتان ایجاد کرده اید.
www.shgn.ir/yii-framework/
yii2.swsco.ir
In a world without any fences or walls,Who needs Gates or Windows!
#9
Posted 12 March 2013 - 10:32 AM
#10
Posted 12 March 2013 - 01:06 PM
Shahcheraghean, on 12 March 2013 - 02:36 AM, said:
اما یه سوال. یه جورایی توی برنامه تعداد فایلها خیلی زیاد نمی شوند؟
مدیریتشون خیلی سخت نمیشه؟
کما که توی این حالت هم اعمال تغییرات ممکنه سخت باشه.
غیر از این هم راه دیگری وجود دارد؟
سلام
من از این روش تو سیستم های خودم استفاده می کنم و واقعا جواب میده .
در مورد اینکه فایل ها زیاد میشن باید بگم ایرادی نداره و من الان تو یکی از ماژول هام حدود ۶۰ تا مدل دارم که با این روش دارم باهاشون کار می کنم . البته این روش بسته به نوع سیستم شما خیلی مزایای دیگه هم در اختیارتون میگذاره که توضیحش بسیار مفصله و باید یه بار سر فرصت براتون بنویسم
مدیریتشون هم سخت نیست ، چون عملا شما به فایل های بیس کاری ندارید و فقط روی یک فایل کد میزنید
تغییرات اگه افزایشی باشه روی مدل این سیستم تقریبا بدون مشکل خواهد بود اما اگه کاهشی و یا تغییر نام باشد در هر صورت شما باید تو کل سیستم ، نه تنها مدل تغییرات رو اعمال کنید
#11
Posted 13 March 2013 - 02:09 AM
اما راه دیگه اینکه شما اصلاً توابع اصلیتون رو توی مدل ننویسید (راستش اصلاً جاشم اونجا نیست! این فریم ورک رفیق نابابه!!!)

مدل رو همینطوری خام میزارید بمونه، حالا با همین GII شما با هر بار تغییر بازنویسیش کنید.
بعد یه شاخه مثلاً به اسم services در protected بسازید و همه کلاسهای منطق برنامتون رو اونجا بزارید. مثلاً به ازای هر مدل یه service درست کنید و توابعی که قبلاً توی مدل مینوشتید رو توی کلاس هم نام مدلتون بنویسید. لزومی هم نداره کلاسهای service از جایی اکستند بشن. یعنی اینطوری:
| |--Protected |----Models |------User.php |----Services |------UserService.php
بعد هم که مشخصه چطوری از توابعتون استفاده کنید:
$service = new UserService(); $model = $service->getBestUser(); $service->setBestUser($model);
حتی میتونید یه شاخه Repository داشته باشید که کلاسهای کار با دیتابیس و کوئری ها رو اونجا بنویسید و اینطور طبقه بندی کدهاتون بهتر میشه.
این یکی از اصول پایه ای مباحث Design Pattern است.
وقتی پیغام میذارید، بی زحمت متنتون رو انتخاب کنید و این دو تا کار ناقابل رو هم انجام بدید:
1. از اون بالا RTL رو انتخاب کنید.
2. فونت رو هم Tahoma بگذارید.
که چشممون در نیاد.
دمت گرم!
www.IranPHP.ir
#12
Posted 13 March 2013 - 04:44 AM
در ضمن این روشی که شما گفتید برای اعمال متدهایی است که می خواهیم بعدا به مدلها اضافه کنیم.
ولی سوال اینجاست که ما مدل را با Gii زدیم ولی حالا می خواهیم یک یا چند فیلد را حذف یا اضافه کنیم، چه باید کرد؟
www.shgn.ir/yii-framework/
yii2.swsco.ir
In a world without any fences or walls,Who needs Gates or Windows!
#13
Posted 13 March 2013 - 11:57 AM
mereeelin, on 11 March 2013 - 08:12 AM, said:
class Post extends PostBase
{
/**
* Returns the static model of the specified AR class.
* @return Product the static model class
*/
public static function model($className=__CLASS__)
{
return parent::model($className);
}
}
...
بنده امتحان کردم همین یه متد هم لازم نبود. بدون آن هم کار می کرد.
دلیل خاصی داره که توی این کلاس هم قرارش می دید؟
www.shgn.ir/yii-framework/
yii2.swsco.ir
In a world without any fences or walls,Who needs Gates or Windows!
#14
Posted 14 March 2013 - 04:31 AM
عمده استفاده اونها در لایه Controller هست.
اینکار باعث جداسازی منطق برنامه از Platform و مدلهای شما میشه، یعنی مثلاً اگر فردا خواستید برای پلت فرم دیگری مثلاً برای موبایل کد بنویسید ساده تر اینکارو انجام بدید.
فکر میکنم مشکل همین بود که وقتی با GII مدل جدید ایجاد میکنیم فایل Model بازنویسی میشه و توابعی که توی اون بود از بین میرن که بنده هم عرض کردم اون توابع رو میتونید از توی مدل در بیارید و توی کلاسهای دیگری تحت نام سرویس قرار بدید.
درمورد سوال آخر هم که خب فیلدهاتون تغییر کرده پس با GII مدل جدید رو تولید و روی قبلی overwrite میکنید. مشکل این کجاس؟
وقتی پیغام میذارید، بی زحمت متنتون رو انتخاب کنید و این دو تا کار ناقابل رو هم انجام بدید:
1. از اون بالا RTL رو انتخاب کنید.
2. فونت رو هم Tahoma بگذارید.
که چشممون در نیاد.
دمت گرم!
www.IranPHP.ir
#15
Posted 15 March 2013 - 10:10 AM
برای crud هم میشه از همون gii استفاده کرد و overwrite بشن، یا اونها باید دستی تغییر کنند.
www.shgn.ir/yii-framework/
yii2.swsco.ir
In a world without any fences or walls,Who needs Gates or Windows!
#16
Posted 02 April 2013 - 12:50 AM
وقتی پیغام میذارید، بی زحمت متنتون رو انتخاب کنید و این دو تا کار ناقابل رو هم انجام بدید:
1. از اون بالا RTL رو انتخاب کنید.
2. فونت رو هم Tahoma بگذارید.
که چشممون در نیاد.
دمت گرم!
www.IranPHP.ir