Yii Framework Forum: توسعه و مدیریت دیتابیس - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

توسعه و مدیریت دیتابیس

#1 User is offline   Manee 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 103
  • Joined: 23-September 12

Posted 07 March 2013 - 02:51 AM

سلام. سوالی که از دیروز دهنم رو مشغول کرده اینه که فرض میکنیم یه دیتابیس داریم که توش شماره تلفن ها رو به همراه کانتکت کامل ذخیره میکنیم. حالا بعدا یادمون می افته که ما آدرس لحاظ نکردیم برای ذخیره و تو دیتابیس هم معرفی نکردید. حالا که از ابزار GII استفاده کردیم و همه چی ساختیم درست کار میکنه ؛ بخواییم بعد این که این فیلد رو اضافه کردیم چطوری میتونیم تو برنامه بگونجونیمش. اینکه میدونم میتونیم تو فرم یه فیلد دیگه تعریف میکنیم. تو مدل چیکار کنیم؟ آیا اگه دوباره از GII استفاده کنیم اون مواردی که نوشتیم از بین میره و باید ازاول شروع کنیم به کد زدن؟

0

#2 User is offline   mereeelin 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 42
  • Joined: 29-October 11

Posted 07 March 2013 - 07:05 AM

View PostManee, on 07 March 2013 - 02:51 AM, said:

سلام. سوالی که از دیروز دهنم رو مشغول کرده اینه که فرض میکنیم یه دیتابیس داریم که توش شماره تلفن ها رو به همراه کانتکت کامل ذخیره میکنیم. حالا بعدا یادمون می افته که ما آدرس لحاظ نکردیم برای ذخیره و تو دیتابیس هم معرفی نکردید. حالا که از ابزار GII استفاده کردیم و همه چی ساختیم درست کار میکنه ؛ بخواییم بعد این که این فیلد رو اضافه کردیم چطوری میتونیم تو برنامه بگونجونیمش. اینکه میدونم میتونیم تو فرم یه فیلد دیگه تعریف میکنیم. تو مدل چیکار کنیم؟ آیا اگه دوباره از GII استفاده کنیم اون مواردی که نوشتیم از بین میره و باید ازاول شروع کنیم به کد زدن؟




توی مدل باید به تابع
rules
این فیلد رو اضافه کنی
و همینطور به تابع
attributeLabels
هم باید اضافه کنید واگه در توابع جستجو و گریدهاتون هم ازش استفاده میکنید و قصد استفاده از فیلترها رو روی این فیلد دارید باید به تابع هایی مانند
search
هم اضافه کنید

البته برای حل ریشه ایه این مشکل یه راه خیلی قشنگ هست که اینجا فرصت مطرح کردنش نیست . اگه علاقمند بودی بهم بگو تا برات توضیح بدم

0

#3 User is offline   Manee 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 103
  • Joined: 23-September 12

Posted 07 March 2013 - 10:40 AM

سلام. ممنون میشم که اون راه حل رو توضیح بدی.

0

#4 User is offline   Shahcheraghean 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 478
  • Joined: 12-December 12
  • Location:Mashhad, IRAN

Posted 09 March 2013 - 05:00 AM


View Postmereeelin, on 07 March 2013 - 07:05 AM, said:

...

البته برای حل ریشه ایه این مشکل یه راه خیلی قشنگ هست که اینجا فرصت مطرح کردنش نیست . اگه علاقمند بودی بهم بگو تا برات توضیح بدم



بابا دوست عزیز این چه حرکتیه. لطفا توضیح بدید دیگه...



www.shgn.ir
www.shgn.ir/yii-framework/
yii2.swsco.ir
In a world without any fences or walls,Who needs Gates or Windows!
0

#5 User is offline   mereeelin 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 42
  • Joined: 29-October 11

Posted 11 March 2013 - 08:12 AM

View PostShahcheraghean, 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.*',
...





1

#6 User is offline   Shahcheraghean 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 478
  • Joined: 12-December 12
  • Location:Mashhad, IRAN

Posted 12 March 2013 - 02:36 AM

راه حل خیلی خوبیه.
اما یه سوال. یه جورایی توی برنامه تعداد فایلها خیلی زیاد نمی شوند؟
مدیریتشون خیلی سخت نمیشه؟
کما که توی این حالت هم اعمال تغییرات ممکنه سخت باشه.
غیر از این هم راه دیگری وجود دارد؟

www.shgn.ir
www.shgn.ir/yii-framework/
yii2.swsco.ir
In a world without any fences or walls,Who needs Gates or Windows!
0

#7 User is offline   Manee 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 103
  • Joined: 23-September 12

Posted 12 March 2013 - 05:49 AM

اگه نشه به راحتی دیتابیس رو رو تغییرات انجام داد واقعا دردسریه برای خوش. تو حالت کلاسیک خودش زهرمار میکنه ساعات آدمو چه برسه به اینکه رو فریم ورک انجام بدی. ولی راه حل اصلا خوبی نبود این مورد. و همیچ وقت هم نمیشه دیتابیس رو واقعا بدون اشکال ساخت اگر هم باشه بعدها تو توسعه به مشکل بر میخوریم

0

#8 User is offline   Shahcheraghean 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 478
  • Joined: 12-December 12
  • Location:Mashhad, IRAN

Posted 12 March 2013 - 09:23 AM

چرا اتفاقا خیلیه راه خوبیه.
اینطوری دیگه با هر تغییر در دیتابیس نیاز به تغییر در کل کلاسها نیست. کلاس های ساخته شده با gii که جای دیگه هستند و شما روی کلاسهایی تغییرات را اعمال می کنید که خودتان ایجاد کرده اید.

www.shgn.ir
www.shgn.ir/yii-framework/
yii2.swsco.ir
In a world without any fences or walls,Who needs Gates or Windows!
0

#9 User is offline   Manee 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 103
  • Joined: 23-September 12

Posted 12 March 2013 - 10:32 AM

شاید خوب باشه. توسعه و نگهداری بیشترین هزینه رو از لحاظ وقت و بقیه موارد رو به خودش اختصاص میده.

0

#10 User is offline   mereeelin 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 42
  • Joined: 29-October 11

Posted 12 March 2013 - 01:06 PM

View PostShahcheraghean, on 12 March 2013 - 02:36 AM, said:

راه حل خیلی خوبیه.
اما یه سوال. یه جورایی توی برنامه تعداد فایلها خیلی زیاد نمی شوند؟
مدیریتشون خیلی سخت نمیشه؟
کما که توی این حالت هم اعمال تغییرات ممکنه سخت باشه.
غیر از این هم راه دیگری وجود دارد؟




سلام
من از این روش تو سیستم های خودم استفاده می کنم و واقعا جواب میده .
در مورد اینکه فایل ها زیاد میشن باید بگم ایرادی نداره و من الان تو یکی از ماژول هام حدود ۶۰ تا مدل دارم که با این روش دارم باهاشون کار می کنم . البته این روش بسته به نوع سیستم شما خیلی مزایای دیگه هم در اختیارتون میگذاره که توضیحش بسیار مفصله و باید یه بار سر فرصت براتون بنویسم

مدیریتشون هم سخت نیست ، چون عملا شما به فایل های بیس کاری ندارید و فقط روی یک فایل کد میزنید

تغییرات اگه افزایشی باشه روی مدل این سیستم تقریبا بدون مشکل خواهد بود اما اگه کاهشی و یا تغییر نام باشد در هر صورت شما باید تو کل سیستم ، نه تنها مدل تغییرات رو اعمال کنید


0

#11 User is offline   Nabi 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 208
  • Joined: 22-February 12
  • Location:Ahwaz

Posted 13 March 2013 - 02:09 AM

روش جناب mereeelin روش خوبیه من با این روش برخورد داشتم.

اما راه دیگه اینکه شما اصلاً توابع اصلیتون رو توی مدل ننویسید (راستش اصلاً جاشم اونجا نیست! این فریم ورک رفیق نابابه!!!) :D
مدل رو همینطوری خام میزارید بمونه، حالا با همین 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
2

#12 User is offline   Shahcheraghean 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 478
  • Joined: 12-December 12
  • Location:Mashhad, IRAN

Posted 13 March 2013 - 04:44 AM

اگه ممکنه درباره این services بیشتر توضیح بدید.
در ضمن این روشی که شما گفتید برای اعمال متدهایی است که می خواهیم بعدا به مدلها اضافه کنیم.
ولی سوال اینجاست که ما مدل را با Gii زدیم ولی حالا می خواهیم یک یا چند فیلد را حذف یا اضافه کنیم، چه باید کرد؟

www.shgn.ir
www.shgn.ir/yii-framework/
yii2.swsco.ir
In a world without any fences or walls,Who needs Gates or Windows!
0

#13 User is offline   Shahcheraghean 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 478
  • Joined: 12-December 12
  • Location:Mashhad, IRAN

Posted 13 March 2013 - 11:57 AM

View Postmereeelin, 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
www.shgn.ir/yii-framework/
yii2.swsco.ir
In a world without any fences or walls,Who needs Gates or Windows!
0

#14 User is offline   Nabi 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 208
  • Joined: 22-February 12
  • Location:Ahwaz

Posted 14 March 2013 - 04:31 AM

Service جاییه که منطق برنامه درش اتفاق میافته. یک سری کلاس و متد هستند که در هر کجای برنامه قابل دسترس هستند.
عمده استفاده اونها در لایه Controller هست.
اینکار باعث جداسازی منطق برنامه از Platform و مدلهای شما میشه، یعنی مثلاً اگر فردا خواستید برای پلت فرم دیگری مثلاً برای موبایل کد بنویسید ساده تر اینکارو انجام بدید.


فکر میکنم مشکل همین بود که وقتی با GII مدل جدید ایجاد میکنیم فایل Model بازنویسی میشه و توابعی که توی اون بود از بین میرن که بنده هم عرض کردم اون توابع رو میتونید از توی مدل در بیارید و توی کلاسهای دیگری تحت نام سرویس قرار بدید.

درمورد سوال آخر هم که خب فیلدهاتون تغییر کرده پس با GII مدل جدید رو تولید و روی قبلی overwrite میکنید. مشکل این کجاس؟



وقتی پیغام میذارید، بی زحمت متنتون رو انتخاب کنید و این دو تا کار ناقابل رو هم انجام بدید:
1. از اون بالا RTL رو انتخاب کنید.
2. فونت رو هم Tahoma بگذارید.
که چشمون در نیاد.
دمت گرم!

www.IranPHP.ir
0

#15 User is offline   Shahcheraghean 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 478
  • Joined: 12-December 12
  • Location:Mashhad, IRAN

Posted 15 March 2013 - 10:10 AM

خوب اون قسمت آخر که گفتید برای overwrite کردن مدل.
برای crud هم میشه از همون gii استفاده کرد و overwrite بشن، یا اونها باید دستی تغییر کنند.

www.shgn.ir
www.shgn.ir/yii-framework/
yii2.swsco.ir
In a world without any fences or walls,Who needs Gates or Windows!
0

#16 User is offline   Nabi 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 208
  • Joined: 22-February 12
  • Location:Ahwaz

Posted 02 April 2013 - 12:50 AM

با توجه به اینکه در این روش، مدل اصلیتون تغییری نمیکنه، میتونید توسط GII مدل جدید رو تولید و روی قبلی overwrite کنید و یا دستی اون رو ویرایش کنید. فرقی نداره.



وقتی پیغام میذارید، بی زحمت متنتون رو انتخاب کنید و این دو تا کار ناقابل رو هم انجام بدید:
1. از اون بالا RTL رو انتخاب کنید.
2. فونت رو هم Tahoma بگذارید.
که چشمون در نیاد.
دمت گرم!

www.IranPHP.ir
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users