2013-12-02 3 views
1

Я учащийся в YII. Я не могу сохранить значения в datatbase, PLS помочь мне в этом. Я должен хранить значения в таблице продуктов. значения извлекаются, но они не сохраняются в БД. Спасибо заранее контроллер:НЕ может хранить данные в базе данных в yii

<?php 

class ProductController extends Controller 
{ 
    public function actionCreate() 
    { 
     $model=new CreateForm; 
    // collect user input data 
     if(isset($_POST['CreateForm'])) 
     { 
      $model->attributes=$_POST['CreateForm']; 
         if($model->validate()) 
         { 
          echo "HI"; 

         } 


     } 
     // display the login form 
     $this->render('create',array('model'=>$model)); 


    } 
} 
?> 

Модель:

<?php 

class CreateForm extends CFormModel 
{ 
    public $product_name; 
    public $category_name; 
    public $description; 

    public static function model($className=__CLASS__) 
    { 
     return parent::model($className); 
    } 
    public function tableName() 
    { 
     return 'products'; 
    } 
    public function rules() 
    { 
     return array(
      array('product_name, category_name, description', 'required'), 
      array('product_name', 'unique', 'className' => 'Product', 'attributeName' => 'product_name', 'message'=>'This product name is already in use'), 
    array('product_name,category_name,desc', 'safe'), 
      ); 

    } 

    public function attributeLabels() 
    { 
     return array(
      'product_name'=>'PRODUCT NAME', 
        'category_name'=>'CATEGORY', 
        'description'=>'DESCRIPTION' 
     ); 
    } 



} 
?> 

вид:

<?php 
$this->pageTitle=Yii::app()->name . ' - Create'; 
$this->breadcrumbs=array(
    'Create', 
); 
?> 

<h1>CREATE</h1> 
<div class="form"> 
<?php $form=$this->beginWidget('CActiveForm', array(
    'id'=>'create-form', 
    'enableAjaxValidation'=>true, 
    'enableClientValidation'=>true, 

)); 

?> 


    <p class="note">Fields with <span class="required">*</span> are required.</p> 

    <div class="row"> 
     <?php echo $form->labelEx($model,'product_name'); ?> 
     <?php echo $form->textField($model,'product_name'); ?> 
     <?php echo $form->error($model,'product_name'); ?> 
    </div> 

    <div class="row"> 

     <?php 
      echo $form->labelEx($model,'category_name'); 
       $records = Category::model()->findAll(); 
       $list = CHtml::listData($records, 'category_id', 'category_name'); 
       echo $form->dropDownList($model,'category_name',$list,array ('prompt'=>'select ')); 
       echo $form->error($model,'category_name'); 
       ?> 

    </div> 

    <div class="row"> 
      <?php echo $form->labelEx($model,'description'); ?></br> 
     <?php echo $form->textArea($model,'description',array('style' => 'height:100px;width:500px;','maxlength'=>500)); ?> 
     <?php echo $form->error($model,'description'); ?> 
    </div> 

    <div class="row submit"> 
     <?php echo CHtml::submitButton('CREATE'); ?> 
    </div> 

<?php $this->endWidget(); ?> 
</div><!-- form --> 
+0

ps: всегда используйте методы validate() и save() при вставке данных; если у вас возникают проблемы при проверке, используйте в модели метод beforeSave() и метод die ('here'), чтобы увидеть сохраненные значения. –

ответ

1
if($model->validate()) 
{ 
     if(!$model->save()) // save it here! 
     { 
      // do stuff after successful save 
     } 
} 

UPDATE:

CFormModel не метод сохранения ()

вам необходимо расширить модель от CActiveRecord

function saveInDb() 
{ 
    $command = Yii::app()->db->createCommand(); // create a sql command and do insert here 
    . 
    . 
    . 
} 
+0

Я попробовал его в контроллере. но он говорит: «Свойство« CreateForm.save »не определено». – user2702228

+1

У CFormModel нет метода save() – tinybyte

+0

происходит ошибка «CreateForm и его поведение не имеют метода или закрытия с именем« save ».» – user2702228

1

Почему не

if($model->validate()) 
{ 
    $model->save(); 
} 

?

ну, в первую очередь, это должна быть форма, основанная на данных таблицы, которую нужно расширить не из CFormModel, а из CActiveRecord. второй: для лучшей читаемости и переносимости переписать ваш метод TABLENAME

public function tableName() 
    { 
     return '{{products}}'; 
    } 
+0

Я попробовал его в контроллере, но он отображает «CreateForm и его поведение не имеет метода или закрытия с именем« save ».» – user2702228

1

Попробуйте это, за исключением функции автоматической формы вызова Validate.

if($model->save()){ 
     echo 'add record success'. 
} 
else { 
     echo 'failed'. 
} 
Смежные вопросы