2011-03-28 47 views
0

簡要介紹:我試圖在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 
)); 

回答

1

不是說這是你問題的答案。但AR正在或僅僅失去了支持。看看新的orm軟件包。文檔正在製作中。

祝你好運。

+0

很高興我們殺死了那個AR。這是第三方,雖然它有一個很好的API,但它非常薄弱。 ORM好得多。 – 2011-08-11 06:47:09