View Full Version : خواندن یک رکورد از یک جدول در View و کنترلر یک جدول دیگر در YII
  
webnevesht
یک شنبه 12 مرداد 1393, 13:54 عصر
سلام.
من چندروزی هست شروع کردم روی Yii کار میکنم.یک مشکل خیلی ساده دارم که سوالم رو با مثال توضیح میدم.
 یه فرم A  داریم  از کنترلر و مدل A
و یه فرم B هم داریم  از کنترلر و مدل B  کهid   ثبت شده در فرم A میشه cat_id فرم B.
فرم  A رو تکمیل میکنیم و اطلاعات فرستاده میشن به فرم B و اونو هم تکمیل میکنیم و به همراه ID A توی بانک ذخیره میشه
تا اینجا مشکلی نیست.
میخوام موقعی که فرم B نشون داده میشه بالای صفحه اطلاعات ثبت شده در فرم A رو نشون بدم. ID شو دارم اما نمیدونم چطوری توی کنترلر و view  
B ازش استفاده کنم برای نمایش اطلاعات.
MMSHFE
یک شنبه 12 مرداد 1393, 19:07 عصر
ببینید، شما باید از Relationها در اکتیورکورد استفاده کنید. برای مثال، فرض کنید دو جدول Post و Comment داریم و حالا میخواین توی صفحه Comment اطلاعات پست مربوطه رو نشون بدین. ابتدا باید توی مدل Comment توی متد relations این کد رو بگذارین:
return array(
    'post'=>array(self::BELONGS_TO, 'Post', 'post_id'),
);
و حالا توی فایل ویو comment.php میتونید با چنین کدی، بعنوان مثال تیتر Post مربوطه رو نشون بدین:
echo $model->post->title;
webnevesht
دوشنبه 13 مرداد 1393, 09:00 صبح
ممنون آقای شهرکی 
relation ها رو من بر قرار کردم. 
اما میخوام اطلاعات id رکوردی که توی url هست رو بخونم که مربوط به کنترلر و مدل دیگه ای میشه.
همچین پیغامی میده وقتی کدی که شما دادین رو استفاده کردم.
Trying to get property of non-object
.
فرم A من اسم مدلش Enter هست و فرم B اسم مدلش Inventory.
توی کنترلر Inventory از یه همچین کدی استفاده کردم برای خوندن اطلاعات
if(!empty($_GET['id'])){
            $id=(int)$_GET['id'];
            
            $enter=Enter::model()->findByPk($id);
            $this->renderPartial('_descinventory',array('enter'=>$enter));
        }
و توی اون viewای هم که میخواستم نشون داده بشه اینو گذاشتم
 echo $enter->paper->paper_title;
با این کد نشون میده اما کلا از قالب صفحه خارج میشه و اون بالای بالای صفحه نشون میده
webnevesht
دوشنبه 13 مرداد 1393, 09:17 صبح
اصلا این کنترلر به نظرتون درسته؟
public function actionCreate()
    {
        // Uncomment the following line if AJAX validation is needed
        // $this->performAjaxValidation($model);
        if(!empty($_GET['id'])){
            $id=(int)$_GET['id'];
            
            $enter=Enter::model()->findByPk($id);
            $this->renderPartial('_descinventory',array('enter'=>$enter));
        }
        
        $model=new Inventory;
        if(isset($_POST['Inventory']))
        {    
            if(isset($_GET['id']))
            $model->enter_id=(int)$_GET['id'];
            $model->attributes=$_POST['Inventory'];
            $model->inventory_date=time();
            if($model->save())
                $this->redirect(array('view','id'=>$model->inventory_id));
        }
        $this->render('create',array(
            'model'=>$model,
        ));
webnevesht
دوشنبه 13 مرداد 1393, 09:39 صبح
آقای شهرکی کنترلرمو به این صورت در آوردم درست شد.
به نظر شما از نظر اصولی هم درسته؟
public function actionCreate()
    {
        // Uncomment the following line if AJAX validation is needed
        // $this->performAjaxValidation($model);
        if(!empty($_GET['id'])){
            $id=(int)$_GET['id'];
            
            $enter=Enter::model()->findByPk($id);
        }
        
        $model=new Inventory;
        if(isset($_POST['Inventory']))
        {    
            if(isset($_GET['id']))
            $model->enter_id=(int)$_GET['id'];
            $model->attributes=$_POST['Inventory'];
            $model->inventory_date=time();
            if($model->save())
                $this->redirect(array('view','id'=>$model->inventory_id,));
        }
        $this->render('create',array(
            'model'=>$model,
            'enter'=>$enter,
        ));
    }
 
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.