簡要介紹:我試圖在FUEL論壇上提問,但每次嘗試註冊時,他們的論壇都會顯示「發送激活電子郵件失敗」,我無法登錄在或重置我的帳戶。所以希望這裏的人會檢查出來。之前我在這個網站上看到了FUEL的一些開發者。如何在FUEL/ActiveRecord中插入一個空值
下面是一個例子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 |
+---------+---------------+--------------+
現在,讓我們使用燃油的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)
注意test_person_2的DATETIME字段爲 「0000-00-00 00:00:00」 這不是NULL。即使我明確指出last_login爲null,FUEL的ActiveRecord類也不爲null。例。
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。 CodeIgniter的ActiveRecord類似乎理解了NULL和''之間的區別。
<?php
// CodeIgniter Example
$o_query = $this->db->insert('test', array(
'user_id' => NULL,
'username' => 'code_igniter_user',
'last_login' => NULL
));
很高興我們殺死了那個AR。這是第三方,雖然它有一個很好的API,但它非常薄弱。 ORM好得多。 – 2011-08-11 06:47:09