2016-03-07 4 views
1

Вот структура таблицы.YII2 получить дату после 10 лет и 5 лет

tbl_staff

firstname varchar(50) 
midname varchar(50) 
lastname varchar(50) 
... 

tbl_staff2

first_day_of_service date 
... 

Вот сценарий. В течение первых 10 лет пребывания персонала в организации он получает награду за лояльность, а затем каждые 5 лет после получения первых 10 лет.

Мой первоначальный код просто получит имя персонала и дату первого дня службы.

public function actionGet_loyalty() { 

     $query = (new \yii\db\Query()) 
       ->select(['firstname', 'midname', 'lastname', 'first_day_service']) 
       ->from('tbl_staff') 
       ->limit(100) 
       ->offset(0) 
       ->orderBy('first_day_service') 
       ->leftJoin('tbl_staff2', 'tbl_staff2.staff_id = tbl_staff.id'); 
     $command = $query->createCommand(); 
     $data = $command->queryAll(); 
     $string = "<table class='table table-striped'><tr><th>No.</th><th>Name</th><th>Date to Receive Loyalty Award</th></tr>"; 
     $i = 1; 
     foreach ($data as $row) { 
      $firstname = $row['firstname']; 
      $midname = $row['midname']; 
      $lastname = $row['lastname']; 
      //$string.=$row['first_day_service']; 
      $string.="<tr>" 
        . "<td>$i</td>" 
        . "<td>" . $firstname . " " . $midname[0] . ". " . $lastname . "</td>" 
        . "<td>" . $row['first_day_service'] . "</td>" 
        . "</tr>"; 
      $i++; 
     } 
     $string.="</table>"; 
     return $string; 
    } 

Как отобразить все имя сотрудника и дату, когда он/она получит награду в порядке возрастания.

Или любой запрос mysql, который будет сортировать имя по дате?

ответ

1

Если вы хотите сделать это с помощью SQL запроса в MySQL можно добавить дату с помощью DATE_ADD функции:

DATE_ADD(date, INTERVAL 5 YEAR) 

Проверить this similar question.

Или с помощью PHP с помощью DateTimemodify метода:

$dateTime = new DateTime($date); 
$dateTime->modify('+ 5 years')->format('Y-m-d H:i:s'); 
+0

но проблема заключается в том, что она должна быть 10years в первый раз затем каждые 5 лет вперед. Хорошо ли просто сделать функцию mysql, которая вернет дату следующей награды, тогда вызовите эту функцию в запросе и установите 'order by' на эту функцию? – beginner

+0

@quickbrownfox Он может быть рассчитан как с MySQL, так и с PHP. Это зависит от вас и зависит от ситуации. – arogachev

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