Краткая информация: я пытался задать это на форумах FUEL, но каждый раз, когда я пытаюсь зарегистрироваться, на их форуме появляется сообщение «Не удалось отправить электронное письмо с кодом активации», и я не могу войти или сбросить свою учетную запись. Так что, надеюсь, люди здесь проверят это. Я видел некоторых разработчиков FUEL на этом сайте раньше.
Вот пример таблицы mysql:
CREATE TABLE `test` (
`user_id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`username` VARCHAR( 128 ) NULL ,
`last_login` DATETIME NULL
) ENGINE = InnoDB
Очевидно, в отличие от многих, мне лично нравится использовать значение NULL для баз данных. С точки зрения непрофессионала, NULL означает, что он никогда не был инициализирован значением. В этом случае, если наш пользователь никогда не входил в систему, я хочу, чтобы это было отражено в его записи, имея значение last_login, равное NULL. Итак, NULL = "никогда не входил."
Если бы я должен был добавить нового пользователя в свою базу данных через командную строку или что-то вроде phpMyAdmin, я набрал бы следующий запрос.
INSERT INTO `test` (
`user_id` ,
`username` ,
`last_login`
)
VALUES (
NULL , 'test_person_1', NULL
);
Это результат этого запроса.
+---------+---------------+--------------+
| user_id | username | last_login |
+---------+---------------+--------------+
| 1 | test_person_1 | NULL |
+---------+---------------+--------------+
Теперь давайте используем FUEL ActiveRecord
Вот моя модель (достаточно простая):
<?php
class Model_Test extends ActiveRecord\Model {
public $primary_key = 'user_id';
public $table_name = 'test'; // Why does fuel want to pluralize table names? Grr.
}
А вот супер базовый пример метода контроллера, который вставляет запись в таблицу. Я знаю, что никогда не захочу, чтобы действие снова и снова вставляло одни и те же данные. Это просто тест. Круто?
public function action_save_example1()
{
$o_user = new Model_Test(array(
'username' => 'test_person_2',
));
}
И вот что я получаю после запуска этого метода:
mysql> select * from test;
+---------+---------------+---------------------+
| user_id | username | last_login |
+---------+---------------+---------------------+
| 1 | test_person_1 | NULL |
| 2 | test_person_2 | 0000-00-00 00:00:00 |
+---------+---------------+---------------------+
2 rows in set (0.00 sec)
Обратите внимание, что поле DATETIME test_person_2 имеет значение "0000-00-00 00:00:00". Это не NULL. Даже если я специально укажу, что last_login имеет значение null, класс FUEL ActiveRecord принимает значение не null. Пример. * * 1 027
public function action_save_example1()
{
$o_user = new Model_Test(array(
'username' => 'test_person_2',
'last_login' => NULL
));
}
У меня такое ощущение, что это запрос, который запускает ActiveRecord.
INSERT INTO `portal_links`.`test` (
`user_id` ,
`username` ,
`last_login`
)
VALUES (
NULL , 'test_person_2', ''
);
Должна быть какая-то логика для проверки, если значение === NULL перед вставкой или обновлением, и если оно NULL, оно должно использовать ключевое слово NULL, а не ''. Класс ActiveRecord CodeIgniter, кажется, понимает разницу между NULL и ''.
<?php
// CodeIgniter Example
$o_query = $this->db->insert('test', array(
'user_id' => NULL,
'username' => 'code_igniter_user',
'last_login' => NULL
));