モデルのアップグレード

ドキュメント

変更点

  • CI4 モデルは、自動データベース接続、基本的な CRUD、モデル内バリデーション、自動ページネーションなど、より多くの機能を備えています。

  • CodeIgniter 4 に名前空間が追加されたため、モデルは名前空間をサポートするように変更する必要があります。

アップグレードガイド

  1. まず、すべてのモデルファイルを **app/Models** フォルダーに移動します。

  2. php タグの直後に次の行を追加します: namespace App\Models;

  3. namespace App\Models; 行の下に次の行を追加します: use CodeIgniter\Model;

  4. extends CI_Modelextends Model に置き換えます。

  5. CI3 の $this->load->model('x'); の代わりに、コンポーネントの名前空間規則に従って、$this->x = new X(); を使用します。 あるいは、model() 関数を使用することもできます: $this->x = model('X');.

モデル構造でサブディレクトリを使用する場合は、それに応じて名前空間を変更する必要があります。 例:バージョン 3 のモデルが **application/models/users/user_contact.php** にある場合、名前空間は namespace App\Models\Users; でなければならず、バージョン 4 のモデルパスは **app/Models/Users/UserContact.php** のようになります。

CI4 の新しいモデルには、多くの組み込みメソッドがあります。 たとえば、find($id) メソッドです。 これを使用して、主キーが $id と等しいデータを見つけることができます。 データの挿入も以前より簡単になりました。 CI4 には insert($data) メソッドがあります。 オプションでこれらの組み込みメソッドをすべて使用して、コードを新しいメソッドに移行できます。

これらのメソッドの詳細については、CodeIgniter のモデルの使用 を参照してください。

コード例

CodeIgniter バージョン 3.x

パス: **application/models**

<?php

class User_contact extends CI_Model
{
    public function insert($name, $address, $email)
    {
        $this->db->insert('user_contacts', array(
            'name'    => $name,
            'address' => $address,
            'email'   => $email,
        ));
    }
}

CodeIgniter バージョン 4.x

パス: **app/Models**

<?php

namespace App\Models;

use CodeIgniter\Model;

class UserContact extends Model
{
    // insert() method already implemented in parent
}

データを挿入するには、$model->insert() メソッドを直接呼び出すことができます。 このメソッドは CI4 から組み込まれているためです。