Я использую Cake PHP 2.10.20 для унаследованного проекта, для которого требуется поле для хранения года. Так что не нужны дни или месяцы, только годы. Я попытался использовать тип поля MySQL YEAR, а также INT (4).
Я использую FormHelper для создания ввода года следующим образом ...
echo $this->Form->input('User.test_year', [
'type' => 'date',
'dateFormat' => 'Y',
'minYear' => date('Y'),
'maxYear' => date('Y') + 1
]);
После сохранения данные запроса содержат массив для поля User.test_year, который выглядит следующим образом ...
array(
'User' => array(
'id' => '1',
'test_year' => array(
'year' => '2020'
)
)
)
Cake PHP всегда использует формат массива для дат. Когда я обычно отлаживаю полное поле даты (например, год + месяц + день) в обратном вызове beforeValidate (), оно уже преобразуется в правильный формат строки. Однако, когда я пытаюсь отладить это поле, предназначенное только для года, в beforeValidate (), оно по-прежнему форматируется как тот же массив.
Поэтому при сохранении я сталкиваюсь с уведомлением PHP и MySQL ошибка ...
Array to string conversion [CORE/Cake/Model/Datasource/DboSource.php, line 2220]
Error: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'Array' in 'field list'
SQL Query: UPDATE `my_database`.`users` SET `id` = 1, `test_year` = Array, `modified` = '2020-04-14 23:10:32' WHERE `my_database`.`users`.`id` = '1'
Очевидно, что год в массиве не преобразуется в правильную строку перед вставкой в базу данных. Я также пытался использовать метод FormHelper :: year () вместо generi c FormHelper :: input (), но это ничего не меняет.
Действительно любопытно узнать, что я делать неправильно или упускать из виду, так что заранее поблагодарите любого поклонника Cake PHP, желающего указать мне правильный путь.
Будьте в безопасности и спасибо!