2013-01-02 1 views
2

Я работаю над проектом планирования часов работы Yii, застрявшим на редактируемом рабочем столе-модуле. Я хочу хранить часы планирования персонала в таблице StaffHours, используя Редактируемый Yii Booster Extension.Как реализовать несколько редактируемых столбцов с помощью yii-booster?

Мой staffhours стол DB stucture как:

id(pk) user_id(fk) staff_id(int) monday(text) tuesday(text) wednesday(text) thursday(text) friday(text) saturday(text) sunday(text)

Весь день текстовые поля используются для хранения сериализации время как в формате ассоциативно-массива:

array(
'12:00 AM' => 'open', 
'12:30 AM' => 'close', 
'01:00 AM' => 'close', 
'01:30 AM' => 'open', 
'02:00 AM' => 'open', 
. 
. 
. 
'11:00 PM' => 'close' 
'11:30 PM' => 'close' 
); 

Я реализовал Editable интерфейс с использованием Yii Booster Extension, снимок часов ниже:

Задача - это то, что я не могу узнать, как хранить/обновлять данные о часах работы в БД.

enter image description here

Некоторые из Кодекса я сделал

---- В видовом ----

<?php 
$this->breadcrumbs=array(
    'Settings'=>array('settings/settings'), 
    'Staff Hours', 
); 
     $user_id = Yii::app()->user->getId(); 
     $condition = "user_id = '$user_id'"; 
     $data = StaffHours::model()->findAll(); 
     $Monday = unserialize($data[0]['monday']); 
     $Tuesday = unserialize($data[0]['tuesday']); 
     $Wednesday = unserialize($data[0]['wednesday']); 
     $Thursday = unserialize($data[0]['thursday']); 
     $Friday = unserialize($data[0]['friday']); 
     $Saturday = unserialize($data[0]['saturday']); 
     $Sunday = unserialize($data[0]['sunday']); 
     foreach($data as $data) 
     { 
?> 

    <div id="settinghead">StaffS Hours </div> 
     <div id="leftmenu"> <?php $this->widget('application.components.widgets.SettingsMenu.settingsmenuWidget'); ?></div> 
     <div id="rightcontent"> 
      <div id="pageheding">Staff Hours Detail </div> 
       <table class="items table table-bordered"> 
       <thead> 
       <tr><th scope="col">Time</th> <th scope="col">Monday</th> <th scope="col">Tuesday</th><th scope="col">Wednesday</th> 
       <th scope="col">Thursday</th><th scope="col">Friday</th><th scope="col">Saturday</th><th scope="col">Sunday</th> </tr> 
       </thead> 
       <?php 
       $start = strtotime('12:00am'); 
       $end = strtotime('11:59pm'); 
       for($i = $start; $i <= $end; $i += 900) 
       { 
        $time = date('h:i A', $i); 
       ?> 
        <tr> 
        <th scope="row"><?php echo $time; ?></th> 
        <td id="mon<?php echo $time; ?>"> 
        <?php 
        $this->widget('bootstrap.widgets.TbEditableField', array(
         'type' => 'select', 
         'model' => $data, 
         'emptytext' => $Monday[$time], 
         'attribute' => 'monday', 
         'url' => $this->createUrl('staffhours/updatetime&time='.$time), //url for submit data 
         'source' => array('Open', 'Close', 'Away'), 
         'value' => $time, 
         'enabled' => true 
        )); 
        ?> 
        </td> 
        <td id="tue<?php echo date('g:i A', $i); ?>"><?php echo $Tuesday[$time]; ?></td> 
        <td id="wed<?php echo date('g:i A', $i); ?>"><?php echo $Wednesday[$time]; ?></td> 
        <td id="thu<?php echo date('g:i A', $i); ?>"><?php echo $Thursday[$time]; ?></td> 
        <td id="fri<?php echo date('g:i A', $i); ?>"><?php echo $Friday[$time]; ?></td> 
        <td id="sat<?php echo date('g:i A', $i); ?>"><?php echo $Saturday[$time]; ?></td> 
        <td id="sun<?php echo date('g:i A', $i); ?>"><?php echo $Sunday[$time]; ?></td> 
        </tr> 
       <?php 
       } 
      } 
       ?> 
       </table> 
     </div> 

---- В StaffHoursController контроллер - -

/** 
* Update time. 
*/ 
public function actionUpdatetime($time) 
{ 
    $user_id = Yii::app()->user->getId(); 
    $pk = $_POST['pk']; 
    $day = $_POST['name']; 
    $status = $_POST['value']; 
    $GetData = StaffHours::model()->findByPk($pk); 
    $DayTimes = unserialize($GetData->monday); 
    if(array_key_exists($time, $DayTimes)) 
    { 
     unset($DayTimes[$time]); 
     //merge new value 
     $DayTimes[$time] = $status; 
     array_push($DayTimes, $DayTimes[$time]); 
     $attributes = array($day => serialize($DayTimes)); 
     $condition = "id = '$pk' AND user_id = '$user_id'"; 
     StaffHours::model()->updateByPk($pk, $attributes, $condition); 
    } 
} 

Если у вас возникнут проблемы или еще один простой способ использовать часы работы персонала с помощью Editable-UI.

Тогда, пожалуйста, предложите лучший способ хранения Staff-Hours с помощью Editable-UI.

ответ

2

Я считаю, что хранение данных массива в текстовом столбце MySql очень нецелесообразно, поскольку вы потеряете производительность, возможность реализовать правильную технику поиска и т. Д. Лучшим дизайном базы данных может быть: У каждого штата есть много часов, и каждый час может быть назначенным для многих сотрудников, простое отношение MANY_MANY. Преимущество в том, что вы можете найти любую дату, любой час, любой персонал с помощью простого, простого, простого запроса или ActiveRecord: enter image description here

+0

Я сделал это от Ajax. Я использовал сериализацию всего времени определенного дня и хранения в db. Спасибо за ваши мысли – Frank

+0

вы добрый – HesamDadafarin

 Смежные вопросы

  • Нет связанных вопросов^_^