0

簡単な説明: 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が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
));
4

1 に答える 1

1

これがあなたの質問に対する答えではありません。しかし、AR はサポートを失った、または失ったばかりです。新しい orm パッケージを調べます。ドキュメントは作成中です。

幸運を。

于 2011-04-01T18:44:57.047 に答える