PDA

View Full Version : خواندن یک رکورد از یک جدول در View و کنترلر یک جدول دیگر در YII



webnevesht
یک شنبه 12 مرداد 1393, 12:54 عصر
سلام.
من چندروزی هست شروع کردم روی Yii کار میکنم.یک مشکل خیلی ساده دارم که سوالم رو با مثال توضیح میدم.
یه فرم A داریم از کنترلر و مدل A
و یه فرم B هم داریم از کنترلر و مدل B کهid ثبت شده در فرم A میشه cat_id فرم B.

فرم A رو تکمیل میکنیم و اطلاعات فرستاده میشن به فرم B و اونو هم تکمیل میکنیم و به همراه ID A توی بانک ذخیره میشه

تا اینجا مشکلی نیست.

میخوام موقعی که فرم B نشون داده میشه بالای صفحه اطلاعات ثبت شده در فرم A رو نشون بدم. ID شو دارم اما نمیدونم چطوری توی کنترلر و view
B ازش استفاده کنم برای نمایش اطلاعات.

MMSHFE
یک شنبه 12 مرداد 1393, 18: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, 08: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, 08: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, 08: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,
));
}