【问题标题】:How do I insert a NULL value in FUEL / ActiveRecord如何在 FUEL / ActiveRecord 中插入 NULL 值
【发布时间】:2011-03-28 16:00:19
【问题描述】:

简述:我试图在 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)

请注意,test_person_2 的 DATETIME 字段是“0000-00-00 00:00:00”,这不是 NULL。即使我特别声明 last_login 为空,FUEL 的 ActiveRecord 类也不为空。示例。

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
));

【问题讨论】:

    标签: mysql activerecord insert null fuelphp


    【解决方案1】:

    这并不是您问题的答案。但 AR 已经或只是失去了支持。查看新的 orm 包。文档正在制作中。

    祝你好运。

    【讨论】:

    • 很高兴我们杀死了那个 AR。它是第三方的,虽然它有一个很好的 API,但它很弱。 ORM 要好得多。
    猜你喜欢
    • 2014-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-02
    • 1970-01-01
    • 2018-04-13
    • 1970-01-01
    相关资源
    最近更新 更多