PDA

View Full Version : مشکل در بدست اوردن یک فیلد با استفاده از id (حل شد)



sasan9
پنج شنبه 15 اسفند 1392, 18:10 عصر
با سلام خدمت شما و تشکر بابت فیلم آموزشی سطح بالاتون من یه مشکل دارم برای ایجاد بانک و روابط اون از migration استفاده نکردم و همون mysql سادست خلاصه یه جدول دسته بندی دارم که ایدی و نیم داره و میخوام تو جدول دیگه که به این نیاز دارم از اسمش استفاده کنم نه از ایدیش خلاصه خیلی باهاش ور رفتم ، نشد تصمیم گرفتم دستی همین کارو انجام بدم و از اون تابعی که تو آموزشتون توضیح دادید استفاده نکردم (یعنی استفاده کردمو نشد) و از دستور زیر تو فرم استفاده کردمو نتیجه گرفتم
<?php echo $form->dropDownList($model,'category_id',CHtml::listData( Categories::model()->findAll(), 'id', 'name')); ?>
ولی حالا که میخوام تو همون جدول و تو pagination مال هر کاربرو نشون بدم نمیتونم حلش کنم ممنون میشم توضیح بدید از این کد استفاده کردم و نشد
public function getCategoryName()
{
$Categoryname = Categories::model()->findByPk(($this->category_id),'id','name');
//print_r($Categoryname);
return isset($Categoryname[$this->category_id])?$Categoryname[$this->category_id]:"Unknown category({$this->category_id})";
}
یه سوال دیگه هم برای جلوگیری از ورود داده نادرست با استفاده از inspect element برای این فیلد هم نمیدونم باید چه کار کنم ، این کارو انجام دادم ولی کار نکرد متاسفانه
public function getRangeOfCategory()
{
//$result = array();
/*foreach($this->category as $cat){
$result[]=$cat->id;
}
*/
//$result=CHttp::listData(Categories::model()->findAll(), 'id', 'name');

//return $result;
}


ببخشید من زیاد سطحم بالا نیست تازه شروع کردم yii رو.

MMSHFE
پنج شنبه 15 اسفند 1392, 18:53 عصر
توی مدل User، متد relations رو اینطوری بگذارین:


public function relations()
{
return array(
'category' => array(self::BELONGS_TO, 'Categories', 'category_id'),
);
}

و توی مدل Categories هم متد relations رو اینطوری بنویسید:


public function relations()
{
return array(
'users' => array(self::HAS_MANY, 'User', 'category_id'),
);
}

حالا توی View برای نمایش اسم دسته بندی هر کاربر، از model->category->name$ استفاده کنید.
درمورد سؤال دومتون هم توی مدل برای جلوگیری از استفاده از مقدارهای غیرمجاز، میتونید از CRangeValidator یا همون in توی متد rules استفاده کنید:

array('category_id', 'in', 'range'=>self::getRangeOfCategory()),

sasan9
جمعه 16 اسفند 1392, 00:44 صبح
من آموزشاتونو دیدم و طبق اونا پیش رفتم یه جدول دارم به اسم category که دو فیلد id و name داره و یه جدول instructions که یه فیلدش category_id هستش موارد بالارو هم دارم توش دقیقا (البته به جای user -> instructions) هستش کارهای زیر رو هم انجام دادم:
public function getTypeOfCat()
{
return CHtml::listData($this->category,'id','name');
}

توی فرم
<?php echo $form->dropDownList($model,'category_id',$model->getTypeOfCat()); ?>
کار نمیکنه ! یعنی
Invalid argument supplied for foreach()
میده ولی
<?php/* echo $form->dropDownList($model,'category_id',CHtml::listData( Categories::model()->findAll(), 'id', 'name'));*/ ?>
کار میکنه و داده هارو میکشه بیرون !
همین مشکلم برطرف بشه اون یکی حله به نظرم.
ممنون بابت پاسختون

MMSHFE
جمعه 16 اسفند 1392, 01:01 صبح
خوب باید هم خطا بده چون this->category$ فقط یک AR هست که درواقع Category مربوط به Instruction جاری محسوب میشه و یک آرایه نیست. دقیقاً چه کاری میخواین انجام بشه؟ میتونید TeamViewer بدین توی پیام خصوصی که به سیستمتون وصل بشم؟

MMSHFE
جمعه 16 اسفند 1392, 02:13 صبح
خوب گویا مشکل حل شد. توی نمایش باید بجای this->CategoryName$ از this->category->name$ استفاده میکردین. برای ولیدیشن هم همونطور که گفتم in مشکل رو حل کرد.