Помогите с структурой Табеля и Model

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
iZacNT
Сообщения: 35
Зарегистрирован: 2019.07.09, 04:53

Помогите с структурой Табеля и Model

Сообщение iZacNT »

Здравствуйте!

Требуется создать табель вывода автомобилей на смену.
Есть парк автомобилей. Каждый отправляется на смену в день(водитель1) и ночь(водитель 2), каждый день.
Как организовать такой табель.
Что мне пришло в голову:
Создать таблицу с столбцами по датам (например:
| name_car | дата 1 | дата 2 | ..... | дата 7 |
), составил график.
Позже средствами Yii делать Alter table и добавляю еще 7 столбцов (на следующую неделю). И т.д.

Как в этом случает быть с Моделью. Как валидировать столбцы с датами которые еще только будут созданы?

Может у кого есть лучшие варианты, буду рад.
unknownby
Сообщения: 747
Зарегистрирован: 2019.11.05, 16:34
Контактная информация:

Re: Помогите с структурой Табеля и Model

Сообщение unknownby »

iZacNT писал(а): 2021.05.05, 11:31 Здравствуйте!

Требуется создать табель вывода автомобилей на смену.
Есть парк автомобилей. Каждый отправляется на смену в день(водитель1) и ночь(водитель 2), каждый день.
Как организовать такой табель.
Что мне пришло в голову:
Создать таблицу с столбцами по датам (например:
| name_car | дата 1 | дата 2 | ..... | дата 7 |
), составил график.
Позже средствами Yii делать Alter table и добавляю еще 7 столбцов (на следующую неделю). И т.д.

Как в этом случает быть с Моделью. Как валидировать столбцы с датами которые еще только будут созданы?

Может у кого есть лучшие варианты, буду рад.
По логике у вас есть таблица автомобилей и таблица водителей, если они не связаны в одну.
Далее в другую таблицу вставляются сведения "автомобиль" (car_id), "водитель" (driver_id) и дата (возможно диапазон) с временем.
И чтобы составить график у вас в эту таблицу вносятся сведения.
Итоговая таблица: id, car_id, driver_id, date (либо date_from, date_to)

По итогу можно ответить на вопросы:
Сколько работал определенный водитель?
Сколько работал определенный автомобиль?
iZacNT
Сообщения: 35
Зарегистрирован: 2019.07.09, 04:53

Re: Помогите с структурой Табеля и Model

Сообщение iZacNT »

unknownby писал(а): 2021.05.05, 12:51 По логике у вас есть таблица автомобилей и таблица водителей, если они не связаны в одну.
Далее в другую таблицу вставляются сведения "автомобиль" (car_id), "водитель" (driver_id) и дата (возможно диапазон) с временем.
И чтобы составить график у вас в эту таблицу вносятся сведения.
Итоговая таблица: id, car_id, driver_id, date (либо date_from, date_to)

По итогу можно ответить на вопросы:
Сколько работал определенный водитель?
Сколько работал определенный автомобиль?

unknownby Спасибо! За основу взял ваш Вариант.

В итоге динамически создаю DataColumn в цикле, с наименованием в виде Даты. В значении ячейки вывожу фамилии водителей.

Изображение

https://ibb.co/Lk8WJxH

Код: Выделить всё

 <?php $columns = [];

    $dateSearchFrom = time()-(48*60*60);
    $dateSearchFrom = date('Y-m-d 00:00:00',$dateSearchFrom); //For 00:00:00 from Eny Time
    $dateSearchFrom = strtotime($dateSearchFrom); //to Integer

    for ($i=0; $i<7; $i++){
        $dateSearchFrom = $dateSearchFrom+(24*60*60);
        $dateSearchTo = date('Y-m-d 23:59:59',$dateSearchFrom); //For 23:59:59 from Eny Time
        $dateSearchTo = strtotime($dateSearchTo); //to Integer
        array_push($columns, [
                'attribute' => 'date'.$i,
                    'header'=> date('d.m.Y', $dateSearchFrom),
                    'format' => 'raw',
                    'value' => function($data) use ($dateSearchFrom, $dateSearchTo) {
                        $result = $data->getWorkDriversOnCar($data->car_id,$dateSearchFrom, $dateSearchTo );
                        if (!empty($result->day)){
                        $dName ="<i class=\"fa fa-sun-o\"></i> ".$data->getDriverName($result->day);
                        }else{
                            $dName="Нет";
                        }

                        if (!empty($result->night)){
                            $nName ="<i class=\"fa fa-moon-o\"></i> ".$data->getDriverName($result->night);
                        }else{
                            $nName="Нет";
                        }
                        return $dName."<br /><br />".$nName;
                    },
                 
                    ]
        );
            }
    ?>

    <?= GridView::widget([
        'dataProvider' => $dataProvider,
        //'filterModel' => $searchModel,
        'columns' => array_merge([
            ['attribute' => 'car_id',
                'value' => function($data){
                    return $data->getCar($data->car_id);
                }],
           // ['class' => 'yii\grid\ActionColumn']
        ],$columns)
            ,
    ]); ?>
Ответить