View Full Version : نحوه ذخیره سازی فرم با 2 جدول
googoli
شنبه 18 مرداد 1393, 10:29 صبح
سلام
من یک فرم دارم که اطلاعات را باید در 2 جدول ذخبره سازی کنه ولی نمی دونم باید چطوری این کار رو انجام بدم ؟
و مورد دیگر این که در فرمی که بالا گفتم یه dropdown دارم که وقتی یک موجودیت از توش انتخاب میشه باید یه سری اطلاعات رو به صورت خودکار در فرم نمایش بده اگر میشه در خصوص این دو مورد من رو راهنمایی کنید ممنون
googoli
شنبه 18 مرداد 1393, 16:34 عصر
کسی نمی تونه کمکم کنه ؟
kazemimorteza
یک شنبه 19 مرداد 1393, 09:47 صبح
وقت بخیر. منظورتون برای دوتا جدوله؟من این جوری فرض کدم همون جا که در کنترلر فرم را فراخوانی می کنی. موقع سیو اولی که شد از مدل دومی یکی نیو کن بعد به attribut هاش مقدار بده.
من دو تا مدل فرضی در نظر گرفتم .
یکی به اسم book و دیگری magezin .
public function create(){
$model=new book;
if(isset($_POST['book']))
{
$savestateInFirstTable="No";
$savestateInSecondTable="No";
$model->attributes=$_POST['book'];
if($model->save()){
$savestateInFirstTable="yes";
$model2=new magazine ();
$model2->attributes=$_POST['book'];
if($model2->save())
$savestateInSecondTable="yes";
$this->redirect(array('view','id'=>$model->id,'savestateInFirstTable'=>$savestateInFirstTable, 'savestateInSecondTable'=>$savestateInSecondTable));
}
}
$this->render('create',array(
'model'=>$model,
));
}
googoli
یک شنبه 19 مرداد 1393, 10:36 صبح
ممنون یه مسئله دیگه هست اونم یادم رفت که بگم اون هم این است که اگر جدول دوم نیاز به ذخیره سازی چند رکورد بود چی ؟(به عنوان مثال میشه فاکتور رو نام برد که یک مشتری می تونه چند تا جنس بخره )
در خصوص مورد دوم باید چکار کنم ؟ منظورم dropdown هست
kazemimorteza
یک شنبه 19 مرداد 1393, 22:13 عصر
وقت بخیر .
می تونی تو رویداد onchange دراپ دان لیستت کد جاوا اسکریپت بنویس .
نمونه :
<div class="row">
<?php echo $form->labelEx($model,'exist'); ?>
<?php echo $form->dropDownList($model,'exist',
array('1'=>'بلی','0'=>'خیر'),array('onchange'=>'alert("");')
); ?>
<?php echo $form->error($model,'exist'); ?>
</div>
موفق باشید.راه راحت تری پیدا کردی راهنمایی بفرمایید.
kazemimorteza
یک شنبه 19 مرداد 1393, 22:18 عصر
میشه از چند مدل مختلف اونجا نیو کرد.بیشتر توضیح بفرمایید Please.
googoli
یک شنبه 19 مرداد 1393, 23:20 عصر
خب من مطلب رو با یه مثال ساده می خوام بگمکه دقیقا چی می خوام
فرض می کنیم که یه فاکتور خرید کالا داریم
فاکتور شامل میشه از 2 قسمت
در قمست اول مشخصات مشتری وارد می شود که در این مورد هیچ بحث خاصی نیست
می ماند قسمت دوم
که مشخصات کالاهایی هست که ما خریداری کردیم که می تونی 1 یا چند کالا باشه
حالا من می خوام این فاکتور رو ذخیره کنم تو 2 جدول باید چطوری این کار صورت بگیرد؟
این روشی که شما گفتید برای یک رکورد جواب میده ولی وقتی ما در جدول دوم چند رکورد داشته باشیم باید چکار کنیم ؟
googoli
یک شنبه 19 مرداد 1393, 23:27 عصر
وقت بخیر .
می تونی تو رویداد onchange دراپ دان لیستت کد جاوا اسکریپت بنویس .
نمونه :
<div class="row">
<?php echo $form->labelEx($model,'exist'); ?>
<?php echo $form->dropDownList($model,'exist',
array('1'=>'بلی','0'=>'خیر'),array('onchange'=>'alert("");')
); ?>
<?php echo $form->error($model,'exist'); ?>
</div>
موفق باشید.راه راحت تری پیدا کردی راهنمایی بفرمایید.
در خصوص این کد هم باید بگم که می خوام به طور مثال
ما یک مشتری رو ایجاد کردیم و این مشتری دارای مشخضاتی مثل ( نام - ادرس - تلفن و .... ) است
می خوام وقتی که اسم مشتری رو انتخاب می کنه مشخصات ثبت شده اون رو نمایش بده
kazemimorteza
یک شنبه 19 مرداد 1393, 23:35 عصر
هر کالایی که خریداری می شود به صورت یک رکود جدید از جدول دوم ثبت می شود.مشکل روی ارتباط خریدار و کالای خریداری شده هست؟
googoli
یک شنبه 19 مرداد 1393, 23:50 عصر
منظورتون رو از این جمله متوجه نشدم
ارتباط خریدار و کالای خریداری
ولی منظور من این هست که
1- می خوام مشخصات مشتری و کالاهای خریداری شده توسط آن مشتری در یک فرم گنجانده شود
2- این که من چطور باید تشخیص بدم که مشتری چند کالا خریداری کرده که من توی جدولم ذخیره اش کنم ؟
googoli
یک شنبه 19 مرداد 1393, 23:57 عصر
من این کد رو پیدا کردم ولی یه چیزی رو متوجه نمیشم ازش
public function actionBatchCreate() {
$models=array();
// since you know how many models
$i=0;
while($i<5) {
$models[]=Modelname::model();
// you can also allocate memory for the model with `new Modelname` instead
// of assigning the static model
}
if (isset($_POST['Modelname'])) {
$valid=true;
foreach ($_POST['Modelname'] as $j=>$model) {
if (isset($_POST['Modelname'][$j])) {
$models[$j]=new Modelname; // if you had static model only
$models[$j]->attributes=$model;
$valid=$models[$j]->validate() && $valid;
}
}
if ($valid) {
$i=0;
while (isset($models[$i])) {
$models[$i++]->save(false);// models have already been validated
}
// anything else that you want to do, for example a redirect to admin page
$this->redirect(array('modelname/admin'));
}
}
$this->render('batch-create-form',array('models'=>$models));
}
به نظرم کد درستی میاد
ولی من منظور از حلقه رو متوجه نمیشم که این عدد 5 اصلا چی هست
کلا یه جورایی تو این کد گنگ هستم بنظرم درسته ولی نمیفهمم چکار کرده توی کد
kazemimorteza
یک شنبه 19 مرداد 1393, 23:58 عصر
اطلاعات کالای خریداری شده با فرم نمیاد توی action مورد نظر تون؟اون ارتباط را فعلا بی خیال.
googoli
دوشنبه 20 مرداد 1393, 00:19 صبح
اطلاعات کالای خریداری شده با فرم نمیاد توی action مورد نظر تون؟
بازم من متوجه نشدم منظورتون چی هست
اگر منظورتون این هست که گنجاندن این دو اطلاعات در یک فرم اشتباه هست خب علتش رو بگید ؟
و اگر هم این کار اشتباه نیست من در actionCreate چه کدی رو باید قرار بدم تا این اطلاعات ثبت بشه
البته من دارم تو نت می گردم به یه تکه کد دیگه بر خوردم
Yii::app()->db->schema->commandBuilder;
$command=$builder->createMultipleInsertCommand('tbl_post', array(
array('title' => 'record 1', 'text' => 'text1'),
array('title' => 'record 2', 'text' => 'text2'),
));
$command->execute();
بنظر خودم اگر من بتونم بفهمم که چند تا رکورد داره برام ارسال میشه ؟ و اون ها رو بتونم توی actionCreate دریافت کنم ؟
ایا باید از 2 تا فرم استفاده بشه در اینجا یا خیر ؟
kazemimorteza
دوشنبه 20 مرداد 1393, 08:27 صبح
سلام.
باکس خرید را با session پیاده سازی کردید؟
خوب کاربر در سیستم ثبت نام کنه .بعد خرید انجام بده.
googoli
دوشنبه 20 مرداد 1393, 09:22 صبح
کاربر که صد درصد باید ثبت نام کرده باشه وگرنه این کار رو نمی تونه انجام بده
و در خصوص مورد دوم session ها رو نمی دونم توی این فریم ورک باید چطور استفاده کنم
ایا این فریم ورک خودش استانداردی برای استفاده از session داره یا نه ؟
میشه در این خصوص یکم بیشتر برام توضیح بدید ؟
kazemimorteza
دوشنبه 20 مرداد 1393, 09:51 صبح
تقریبا مثل php هست و تغییرات چندانی نداره.
برای امنیت بیشتر که session stealing اتفاق نیفته میتونی مسیر ذخیره session را توی protected خودت قرار بدید.
این کتابا The Yii Book by Larry Ullman را بگیر تو بخش مربوطه اینا خوب گفته.
protected/config/main.php/
ودرارایه component مقدارزیرراقرار بده
'session'=>array('autoStart'=>true, 'savePath'=>$path,)
'session'=>array('autoStart'=>true, 'savePath'=>$path,)
البته فولدر session ر ایجادکن .
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.