2013-08-25 2 views
3

Я начинаю изучать php с помощью Yii, и у меня есть большой вопрос, может быть, вы можете мне помочь.для хранения даты и времени автоматически с использованием Yii

Я использую форму для создания пользователей. Я хочу сохранить данные пользователей, которые я представляю в форме в БД (MySQL), но я также должен хранить дату и время в поле datetime в БД. Я видел некоторые расширения, такие как CJUIDATEPICKER, чтобы выбрать дату, но я не знаю расширения, чтобы выбрать дату и время. Я думаю, что лучший способ - сохранить дату-время автоматически, когда я создаю нового пользователя. Теперь у меня есть текстовое поле в форме, где я должен ввести дату и время в формате yyyy-mmmm-dddd hh: mm: ss, но я думаю, что это не полезно.

Пожалуйста, кто-нибудь поможет мне и объяснит мне, как хранить дату и время, когда я создаю регистр в БД?

спасибо.

EDIT:

Теперь я использую "$ модели-> reg_date = новый CDbExpression ('NOW()');" внутри контроллера actionCreate(), и он работает хорошо, но я думаю, что было бы лучше показать это datetime в поле формы создания пользователя, прежде чем писать что-либо, и сохранить все поля формы при нажатии на submit. Я пытался сделать это, но, как вы можете себе представить поле только показать «NOW()»

Это часть моего кода формы в _form.php:

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

Кто-то может мне помочь?

Еще раз спасибо!

ответ

6

Если вы автоматически сохранять DateTime при создании нового пользователя, я хотел бы использовать CDbExpression:

$model->created = new CDbExpression('NOW()'); // "YYYY-MM-DD HH:MM:SS" 

И UNIX_TIMESTAMP (NOW()) для временной метки Unix. Следует отметить, что эти функции зависят от MySQL.

Я также хотел бы указать, что CJuiDatePicker - это виджет , который поставляется в комплекте с Yii. Извините за придирчивость.


Обновленный ответ с помощью функции даты РНР а не сейчас в MySQL():

// UserController.php 
public function actionCreate() 
{ 
    $model=new User; 
    $model->created = date("Y-m-d H:i"); // Added this. 
    if(isset($_POST['User'])) 
    { 
     $model->attributes=$_POST['User']; 
     if($model->save()) 
     { 
      $this->redirect(array('view','id'=>$model->id)); 
     } 
    } 
    $this->render('create',array(
     'model'=>$model, 
    )); 
} 

// _form.php inside your Active Form 
echo $form->labelEx($model,'created'); // Display it anyway you'd like. A label perhaps? 
echo $form->hiddenField($model, 'created'); // Send back value to the controller on submit 

Это должно быть!

И что-то стоит упомянуть, если вы используете бутстрап. Не помещайте скрытое поле сначала в форму, потому что bootstraps css-селектора first-child будут помешать верхнему краю.

+0

Спасибо, я написал CDbExpression ('NOW()'); в контроллер actionCreate(), но я думаю, что лучше будет показывать это datetime в области формы создания пользователя, прежде чем писать что-нибудь в нем, и сохранить это поле данных, когда вы нажимаете кнопку sumit. Не могли бы вы помочь мне? –

+0

Хорошо, я обновил ответ. Я не пробовал это, но это должно сработать. – ippi

+0

Спасибо ippi, ваше решение очень полезно, теперь у меня есть только небольшой вопрос. Как я мог установить час в стране, где человек создал реестр? Я хочу сказать, что час зависит от страны. –

0

Если datetime поле должно быть установлено автоматически вы можете изменить его на timestamp вместо и установить CURRENT_TIMESTAMP в качестве значения по умолчанию, как показано на this answer.

Если вы настаиваете на использовании datetime, вы можете использовать триггер, как описано в this answer.

+0

благодаря Тофер, но я предпочитаю использовать $ модели-> reg_date = новый CDbExpression ('NOW()'), так как это проще, хе-хе. Кроме того, я должен использовать datetime. –

1

в контроллере пользователя или регистрации просто напишите внутри actionCreate() method ..

public function actionCreate() 
{ 
     if(isset($_POST['user'] 
     { 
      $model->attributes=$_POST['user']; 
      $model->created_date=new CDbExpression('NOW()'); //inserting created time 

      // ... 
     } 
} 

он автоматически вставляет ваше созданное пользователем время.

+0

Спасибо, что помогли мне, он работает хорошо, но можно ли было бы автоматически показывать это дату и время в форме, прежде чем писать что-нибудь? Я имею в виду, не создавайте дату и время регистрации в контроллере actionCreate, но чтобы показать дату, заполненное в форме, и сохранить его, когда вы нажимаете sumit. –

2

Нет необходимости добавлять даты времени Фейлда в форме * Просто удалите время Фейлда даты из вашей формы *.

И добавить CDbExpression ('NOW()') для вашей модели в правилах, Просто смотри пример

public function rules() 
    { 
     return array(
//date_modified and date_created is my database field names.. 
       array('date_modified','default', 
        'value'=>new CDbExpression('NOW()'),//automatically add the current date in mysql feild 
        'setOnEmpty'=>false,'on'=>'update'), 
        array('date_created,date_modified','default', 
       'value'=>new CDbExpression('NOW()'), 
       'setOnEmpty'=>false,'on'=>'insert'), 
); 
} 
0

, если вы хотите изменить ваш взгляд попробовать ->kartiks TimePicker widget

экс :

<?= $form->field($model, 'time')->widget(TimePicker::classname(),[ 
'pluginOptions' => ['defaultTime' => 'current'] ]);?> 
Смежные вопросы