<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Model  |  takeHo（たけほ）のへなちょこ台帳</title>
	<atom:link href="https://blog.takeho.com/tag/model/feed/" rel="self" type="application/rss+xml" />
	<link>https://blog.takeho.com</link>
	<description>いわゆる自由帳ってところです。</description>
	<lastBuildDate>Tue, 09 Dec 2025 01:25:37 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.6</generator>

<image>
	<url>https://blog.takeho.com/wp-content/uploads/2024/08/icon-150x150.png</url>
	<title>Model  |  takeHo（たけほ）のへなちょこ台帳</title>
	<link>https://blog.takeho.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>複数のモデルを共通して簡単に利用するための技：CodeIgniter 3のコアクラス拡張</title>
		<link>https://blog.takeho.com/5ux0tlca9wc51pvn7jtuns1wu3ovipr0/</link>
					<comments>https://blog.takeho.com/5ux0tlca9wc51pvn7jtuns1wu3ovipr0/#respond</comments>
		
		<dc:creator><![CDATA[たけほ]]></dc:creator>
		<pubDate>Thu, 19 Sep 2024 16:05:00 +0000</pubDate>
				<category><![CDATA[CodeIgniter]]></category>
		<category><![CDATA[Model]]></category>
		<guid isPermaLink="false">https://blog.takeho.com/?p=380</guid>

					<description><![CDATA[CodeIgniter 3を使用する際、モデルはデータベースとのやり取りを担う重要な役割を果たします。しかし、複数のモデル間で共通する処理を繰り返し記述すると、コードが冗長になり、保守性が低下してしまいます。そこで今回は [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>CodeIgniter 3を使用する際、モデルはデータベースとのやり取りを担う重要な役割を果たします。しかし、複数のモデル間で共通する処理を繰り返し記述すると、コードが冗長になり、保守性が低下してしまいます。そこで今回は、コアクラスを拡張して、複数のモデルで共通の機能を簡単に利用できる方法をご紹介します。このテクニックを使うことで、開発の効率が大幅に向上します。</p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-2"><label class="toc-title" for="toc-checkbox-2">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">MY_Modelという共通ベースモデルを作成する</a><ol><li><a href="#toc2" tabindex="0">ステップ</a><ol><li><a href="#toc3" tabindex="0">コアクラスにベースモデルを作成</a></li><li><a href="#toc4" tabindex="0">モデルでベースモデルを継承</a></li></ol></li></ol></li><li><a href="#toc5" tabindex="0">モデル内での共通処理を簡素化する</a></li><li><a href="#toc6" tabindex="0">共通のバリデーションルールをベースモデルに追加</a><ol><li><a href="#toc7" tabindex="0">ベースモデルにバリデーションルールを追加</a></li><li><a href="#toc8" tabindex="0">モデルごとのバリデーションルール設定例</a></li></ol></li><li><a href="#toc9" tabindex="0">まとめ</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">MY_Modelという共通ベースモデルを作成する</span></h2>



<p>CodeIgniterでは、<code>MY_</code> プレフィックスをつけたファイルを作成することで、フレームワークのコアクラスを拡張できます。これを利用して、全てのモデルに共通する機能をまとめた<strong>ベースモデル</strong>を作成しましょう。</p>



<h3 class="wp-block-heading"><span id="toc2">ステップ</span></h3>



<h4 class="wp-block-heading"><span id="toc3">コアクラスにベースモデルを作成</span></h4>



<p><code><strong>application/core/MY_Model.php</strong></code> というファイルを作成し、共通のロジックを記述します。</p>



<pre class="wp-block-code"><code>&lt;?php
class MY_Model extends CI_Model {

    public function __construct() {
        parent::__construct();
    }

    public function find($id, $table) {
        return $this->db->where('id', $id)->get($table)->row();
    }

    public function get_all($table) {
        return $this->db->get($table)->result();
    }

    public function insert($table, $data) {
        return $this->db->insert($table, $data);
    }

    public function update($id, $table, $data) {
        return $this->db->where('id', $id)->update($table, $data);
    }

    public function delete($id, $table) {
        return $this->db->where('id', $id)->delete($table);
    }
}
</code></pre>



<h4 class="wp-block-heading"><span id="toc4">モデルでベースモデルを継承</span></h4>



<p>例えば、<code>User_model</code> や <code>Product_model</code> などのモデルでこの共通ベースモデルを継承します。</p>



<pre class="wp-block-code"><code>class User_model extends MY_Model {

    protected $table = 'users';

    public function __construct() {
        parent::__construct();
    }

    public function get_active_users() {
        return $this->db->where('status', 'active')->get($this->table)->result();
    }
}
</code></pre>



<h2 class="wp-block-heading"><span id="toc5">モデル内での共通処理を簡素化する</span></h2>



<p>ベースモデルを作成することで、データベース操作に関する共通処理を各モデルで簡単に行えるようになります。特に、テーブル名を各モデルで設定し、ベースモデルのメソッドで利用することで、コードが大幅に短縮されます。</p>



<pre class="wp-block-code"><code>class MY_Model extends CI_Model {

    protected $table;

    public function find($id) {
        return $this->db->where('id', $id)->get($this->table)->row();
    }

    public function get_all() {
        return $this->db->get($this->table)->result();
    }

    public function insert($data) {
        return $this->db->insert($this->table, $data);
    }

    public function update($id, $data) {
        return $this->db->where('id', $id)->update($this->table, $data);
    }

    public function delete($id) {
        return $this->db->where('id', $id)->delete($this->table);
    }
}
</code></pre>



<h2 class="wp-block-heading"><span id="toc6">共通のバリデーションルールをベースモデルに追加</span></h2>



<p>各モデルでよく使うバリデーションを共通化するために、ベースモデルにバリデーションルールを追加します。これにより、モデルごとのコードの重複を避け、管理しやすくなります。</p>



<h3 class="wp-block-heading"><span id="toc7">ベースモデルにバリデーションルールを追加</span></h3>



<pre class="wp-block-code"><code>class MY_Model extends CI_Model {

    protected $table;
    protected $validation_rules = array();

    public function __construct() {
        parent::__construct();
        $this->load->library('form_validation');
    }

    public function validate($data) {
        $this->form_validation->set_data($data);
        $this->form_validation->set_rules($this->validation_rules);

        if ($this->form_validation->run() == FALSE) {
            return $this->form_validation->error_array();
        } else {
            return TRUE;
        }
    }
}
</code></pre>



<h3 class="wp-block-heading"><span id="toc8">モデルごとのバリデーションルール設定例</span></h3>



<pre class="wp-block-code"><code>class User_model extends MY_Model {

    protected $table = 'users';

    public function __construct() {
        parent::__construct();
        $this->validation_rules = array(
            array(
                'field' => 'name',
                'label' => 'Name',
                'rules' => 'required'
            ),
            array(
                'field' => 'email',
                'label' => 'Email',
                'rules' => 'required|valid_email'
            )
        );
    }
}
</code></pre>



<h2 class="wp-block-heading"><span id="toc9">まとめ</span></h2>



<p>これらのテクニックを使うことで、CodeIgniter 3でのモデル管理が簡単かつ効率的になります。共通処理をベースモデルにまとめることで、コードの重複を減らし、保守性を向上させることができます。ぜひ、これらの技を活用して、より良い開発環境を整えてください。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.takeho.com/5ux0tlca9wc51pvn7jtuns1wu3ovipr0/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>CodeIgniterのModelの概要について</title>
		<link>https://blog.takeho.com/zpd6llieq6sm6i1710w68soctz535bi9/</link>
					<comments>https://blog.takeho.com/zpd6llieq6sm6i1710w68soctz535bi9/#respond</comments>
		
		<dc:creator><![CDATA[たけほ]]></dc:creator>
		<pubDate>Thu, 29 Aug 2024 17:40:00 +0000</pubDate>
				<category><![CDATA[CodeIgniter]]></category>
		<category><![CDATA[Model]]></category>
		<guid isPermaLink="false">https://blog.takeho.com/?p=294</guid>

					<description><![CDATA[CI3からCI4へのバージョンアップは飛躍的に全体の仕様が変更となりモデルも今までの仕様と全く異なる内容になっているので、最低限必要な情報について説明します。 設定 プロパティについて、次に説明します。 $table 利 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>CI3からCI4へのバージョンアップは飛躍的に全体の仕様が変更となりモデルも今までの仕様と全く異なる内容になっているので、最低限必要な情報について説明します。</p>



<h3 class="wp-block-heading"><span id="toc1">設定</span></h3>



<p>プロパティについて、次に説明します。</p>



<pre class="wp-block-code"><code>&lt;?php

namespace App\Models;

use CodeIgniter\Model;

class UserModel extends Model
{
    protected $table = 'users';
    protected $primaryKey = 'user_id';
    protected $useAutoIncrement = false;
    protected $returnType= 'array';
    //protected $returnType = User::class;
    protected $useSoftDeletes = true;
    protected $allowedFields = &#91;
        'username',
        'email',
        'password',
    ];
    protected bool $allowEmptyInserts = false;

    // date property
    protected $useTimestamps = true;
    protected $dateFormat = 'datetime';
    protected $createdField = 'created_at';
    protected $updatedField = 'updated_at';
    protected $deletedField = 'deleted_at';
}
</code></pre>



<h4 class="wp-block-heading"><span id="toc2">$table</span></h4>



<p>利用するテーブル物理名を設定するプロパティです。<br>必ず設定する必要があります。</p>



<h4 class="wp-block-heading"><span id="toc3">$primaryKey</span></h4>



<p>テーブルのプライマリーキーを設定するプロパティです。<br>デフォルトは<code>id</code>なので、ほとんどのテーブルでは設定しなくても問題ありませんが、<br>id以外のカラムをPKにする場合は、必ず設定する必要があります。</p>



<h4 class="wp-block-heading"><span id="toc4">$useAutoIncrement</span></h4>



<p>オートインクリメント機能を利用するか設定するプロパティです。<br>デフォルトは<code>true</code>なので、ほとんどのテーブルでは設定しなくても問題ありませんが、<br>オートインクリメントではないカラムをPKにする場合は、<code>false</code>に設定する必要があります。</p>



<h4 class="wp-block-heading"><span id="toc5">$returnType</span></h4>



<p>CRUD実行時に返却される結果の形式を設定するプロパティです。<br>デフォルトは<code>array</code>なので配列形式で返されますが、Entity形式も指定できます。</p>



<h4 class="wp-block-heading"><span id="toc6">$useSoftDeletes</span></h4>



<p>delete()でのレコード削除を論理削除にするか設定するプロパティです。<br>デフォルトは<code>false</code>なので、物理削除テーブルとして扱われます。<br><code>true</code>に設定すると論理削除になるだけでなく、find()による取得時も論理削除されたデータは取得されないような条件でSQLが構築されます。</p>



<h4 class="wp-block-heading"><span id="toc7">$allowedFields</span></h4>



<p>登録/更新を許可するカラムを設定するプロパティです。<br>指定されていないカラムは値をセットしていても無視されるので、意図しないカラムの更新を防ぐことが出来ます。<br>なお、取得には影響しません。</p>



<h4 class="wp-block-heading"><span id="toc8">$allowEmptyInserts</span></h4>



<p>空データのinsertを許容するか設定するプロパティです。<br>デフォルトは<code>false</code>なので、許容されません。<br>何かしらの理由で。空データをまず登録した後で必要な値に更新したいケースがあれば、利用することがありそうですが、基本的には利用しないと思います。</p>



<h4 class="wp-block-heading"><span id="toc9">$useTimestamps</span></h4>



<p>登録や更新に、現在日付を自動的に登録するか設定するプロパティです。<br>デフォルトは<code>false</code>です。<br><code>true</code>にした場合は、<code>$dateFormat</code>で指定した形式で自動的に登録します。</p>



<h4 class="wp-block-heading"><span id="toc10">$dateFormat</span></h4>



<p>自動登録する日付の型を設定するプロパティです。<br>デフォルトは<code>datetime</code>ですが、他にも<code>date</code>か<code>int</code>が設定できます。</p>



<h4 class="wp-block-heading"><span id="toc11">$createdField</span></h4>



<p>登録日時に現在日時を登録するカラムを設定するプロパティです。<br>デフォルトは、<code>created_at</code>です。</p>



<h4 class="wp-block-heading"><span id="toc12">$updatedField</span></h4>



<p>更新日時に現在日時を登録するカラムを設定するプロパティです。<br>デフォルトは、<code>updated_at</code>です。</p>



<h4 class="wp-block-heading"><span id="toc13">$deletedField</span></h4>



<p>削除日時に現在日時を登録するカラムを設定するプロパティです。<br>デフォルトは、<code>deleted_at</code>です。</p>



<h3 class="wp-block-heading"><span id="toc14">バリデーション</span></h3>



<p>次に、モデルを利用した登録/更新時にバリデーションを行う際の各種設定です。</p>



<pre class="wp-block-code"><code>&lt;?php

namespace App\Models;

use CodeIgniter\Model;

class UserModel extends Model
{
    protected $validationRules = &#91;
        'username'     => 'required|max_length&#91;30]|alpha_numeric_space|min_length&#91;3]',
        'email'        => 'required|max_length&#91;254]|valid_email|is_unique&#91;users.email]',
        'password'     => 'required|max_length&#91;255]|min_length&#91;8]',
        'pass_confirm' => 'required_with&#91;password]|max_length&#91;255]|matches&#91;password]',
    ];
    protected $validationMessages = &#91;
        'email' => &#91;
            'is_unique' => '既に登録されているメールアドレスです。',
        ],
    ];
    protected $skipValidation = false;
    protected $cleanValidationRules = true;
}</code></pre>



<h4 class="wp-block-heading"><span id="toc15">$validationRules</span></h4>



<p>バリデーションルールを配列形式で設定するプロパティです。<br>デフォルトは、<code>[]</code>です。</p>



<h4 class="wp-block-heading"><span id="toc16">$validationMessages</span></h4>



<p>バリデーションエラー時のメッセージを配列形式で設定するプロパティです。<br>デフォルトは、<code>[]</code>です。</p>



<h4 class="wp-block-heading"><span id="toc17">$skipValidation</span></h4>



<p>登録/更新時にバリデーションを行うか設定するプロパティです。<br>デフォルトは、<code>false</code>なのでバリデーションは行います。<br>ただ、前述の<code>$validationRules</code>を指定しないと行われません。</p>



<h4 class="wp-block-heading"><span id="toc18">$cleanValidationRules</span></h4>



<p>渡されたデータに存在しないバリデーションルールは、バリデーション対象から除外するか設定するプロパティです。<br>デフォルトは<code>true</code>なので除外されます。<br>更新時に一部カラムだけ更新したい場合に、trueにしておけばバリデーションエラーを回避できます。</p>



<h3 class="wp-block-heading"><span id="toc19">コールバック</span></h3>



<p>各CRUD実行時に使用可能なコールバックです。</p>



<pre class="wp-block-code"><code>&lt;?php

namespace App\Models;

use CodeIgniter\Model;

class UserModel extends Model
{
    protected $allowCallbacks = true;
    protected $beforeInsert = &#91;];
    protected $afterInsert = &#91;];
    protected $beforeUpdate = &#91;];
    protected $afterUpdate = &#91;];
    protected $beforeFind = &#91;];
    protected $afterFind = &#91;];
    protected $beforeDelete = &#91;];
    protected $afterDelete = &#91;];
}
</code></pre>



<h4 class="wp-block-heading"><span id="toc20">$allowCallbacks</span></h4>



<p>コールバック処理を許可するか設定するプロパティです。<br>デフォルトは<code>true</code>なので、コールバック処理が実装されていれば実行されます。</p>



<h4 class="wp-block-heading"><span id="toc21">$beforeInsert、$beforeUpdate、$beforeFind、$beforeDelete</span></h4>



<p>それぞれ、<code>登録/更新/取得/削除前</code>に行う処理を記載するメソッドです。<br>メソッドに渡される引数はそれぞれ異なります。</p>



<h4 class="wp-block-heading"><span id="toc22">$afterInsert、$afterUpdate、$afterFind、$afterDelete</span></h4>



<p>それぞれ、<code>登録/更新/取得/削除後</code>に行う処理を記載するメソッドです。<br>beforeと同様、メソッドに渡される引数はそれぞれ異なります。</p>



<h3 class="wp-block-heading"><span id="toc23">CRUDメソッド</span></h3>



<h4 class="wp-block-heading"><span id="toc24">find($pk)</span></h4>



<p>PKを条件にデータを取得するメソッドです。<br>論理削除されたデータは取得されません。</p>



<pre class="wp-block-code"><code>$user = $userModel->find(1); // PKで単一取得
$user = $userModel->find(&#91;1, 2]); // PKで複数取得
// SELECT * FROM `users` WHERE `users`.`deleted_at` IS NULL AND `users`.`id` IN (1,2)</code></pre>



<h4 class="wp-block-heading"><span id="toc25">findColumn($columeName)</span></h4>



<p>単一カラムの取得を行うメソッドです。<br>論理削除されたデータは取得されません。</p>



<pre class="wp-block-code"><code>$user = $userModel->findColumn('login_id');
// SELECT `login_id` FROM `users` WHERE `users`.`deleted_at` IS NULL</code></pre>



<h4 class="wp-block-heading"><span id="toc26">findAll($limit, $offset)</span></h4>



<p>データを全件取得するメソッドです。<br>条件を絞りたい場合はクエリビルダーのwhereなどを利用します。<br>論理削除されているデータは取得されません。</p>



<pre class="wp-block-code"><code>$user = $userModel->where('user_code', 'test')->findAll();
// SELECT * FROM `users` WHERE `user_code` = 'test' AND `users`.`deleted_at` IS NULL</code></pre>



<h4 class="wp-block-heading"><span id="toc27">first()</span></h4>



<p>単一のデータを取得するメソッドです。<br>条件を絞りたい場合はクエリビルダーのwhereなどを利用します。<br>論理削除されているデータは取得されません。</p>



<pre class="wp-block-code"><code>$user = $userModel->where('user_code', 'test')->first();
// SELECT * FROM `users` WHERE `user_code` = 'test' AND `users`.`deleted_at` IS NULL  LIMIT 1</code></pre>



<h4 class="wp-block-heading"><span id="toc28">withDeleted()</span></h4>



<p>論理削除されたデータも取得したい時に利用するメソッドです。</p>



<pre class="wp-block-code"><code>$user = $userModel->where('user_code', 'test')->withDeleted()->findAll();
// SELECT * FROM `users` WHERE `user_code` = 'test'</code></pre>



<h4 class="wp-block-heading"><span id="toc29">onlyDeleted()</span></h4>



<p>論理削除されたデータのみ取得したい時に利用するメソッドです。</p>



<pre class="wp-block-code"><code>$user = $userModel->onlyDeleted()->where('user_code', 'test')->findAll();
// SELECT * FROM `users` WHERE `user_code` = 'test' AND `users`.`deleted_at` IS NOT NULL</code></pre>



<h4 class="wp-block-heading"><span id="toc30">insert($data)</span></h4>



<p>新規登録したい場合に利用するメソッドです。</p>



<pre class="wp-block-code"><code>$data = &#91;
  'login_id' => 'user1',
  'password' => 'password',
];
$userModel->insert($data); // return PK
$userModel->insert($data, false); // returnクエリ成否。成功(true)、失敗(false)
$userModel->getInsertID(); // return 登録したPKの値
// INSERT INTO `users` (`login_id`, `password`, `created_at`, `updated_at`) VALUES ('user1', 'password', '2024-04-23 09:20:33', '2024-04-23 09:20:33')</code></pre>



<h4 class="wp-block-heading"><span id="toc31">allowEmptyInserts()</span></h4>



<p>空のデータを新規登録したい場合に利用するメソッドです。</p>



<pre class="wp-block-code"><code>$userModel->allowEmptyInserts()
// created_at, updated_atの自動登録をモデルで設定している場合
// INSERT INTO `users` (`created_at`, `updated_at`) VALUES ('2024-04-23 09:33:57', '2024-04-23 09:33:57')
// created_at, updated_atの自動登録をモデルで設定していない場合
// INSERT INTO `users` VALUES ()</code></pre>



<h4 class="wp-block-heading"><span id="toc32">update($pk, $data)</span></h4>



<p>データを更新したい場合に利用するメソッドです。</p>



<pre class="wp-block-code"><code>$data = &#91;
   'login_id' => 'user1',
   'password' => 'password',
];
$userModel->update(1, $data); // return クエリ成否。返り値は成功(true)、失敗(false)。
// UPDATE `users` SET `login_id` = 'user1', `password` = 'password' WHERE `users`.`id` IN (1)

$userModel->update(&#91;10, 11, 12], $data); // 更新処理を実施
// UPDATE `users` SET `login_id` = 'user1', `password` = 'password' WHERE `users`.`id` IN (10,11,12)

$userModel->where('name', '山田')->set($data)->update(); // 主キー以外のupdateをしたい場合
// UPDATE `users` SET `login_id` = 'user1', `password` = 'password' WHERE `name` = '山田'

$userModel->set($data)->update(); // 更新処理を実施
// 4.3からwhereを指定しないとエラーになります
// Updates are not allowed unless they contain a "where" or "like" clause</code></pre>



<h4 class="wp-block-heading"><span id="toc33">save()</span></h4>



<p>insert()/update()のラッパーで、PKが指定されていれば更新、されていなければ新規登録するメソッドです。</p>



<pre class="wp-block-code"><code>$data = &#91;
   'login_id' => 'user1',
   'password' => 'password',
];
$userModel->save($data); // 新規登録。return クエリ成否。返り値は成功(true)、失敗(false)
// INSERT INTO `users` (`login_id`, `password`) VALUES ('user1', 'password')

$data = &#91;
   'id' => 10,
   'login_id' => 'user1',
   'password' => 'password',
];
$userModel->save($data); // 更新
// UPDATE `users` SET `login_id` = 'user1', `password` = 'password' WHERE `users`.`id` IN (10)</code></pre>



<h4 class="wp-block-heading"><span id="toc34">delete()</span></h4>



<p>データを削除したい場合に利用するメソッドです。<br>$useSoftDeletesが設定されていれば論理削除、されていなければ物理削除になります。</p>



<pre class="wp-block-code"><code>$userModel->delete(1); // PKで単一削除。return クエリ成否。返り値は成功(true)、失敗(false)。
// UPDATE `users` SET `deleted_at` = '2024-04-23 10:11:36' WHERE `id` IN (1) AND `deleted_at` IS NULL

$userModel->delete(&#91;1, 2]); // PKで複数削除
// UPDATE `users` SET `deleted_at` = '2024-04-23 10:12:14' WHERE `id` IN (1,2) AND `deleted_at` IS NULL

$userModel->where('login_id', 'user1')->delete(); // PK以外の条件場合はクエリビルダーのwhere等を使う
// UPDATE `users` SET `deleted_at` = '2024-04-23 10:13:00' WHERE `login_id` = 'user1' AND `deleted_at` IS NULL</code></pre>



<h4 class="wp-block-heading"><span id="toc35">purgeDeleted()</span></h4>



<p>論理削除されたデータを全て物理削除するメソッドです。</p>



<pre class="wp-block-code"><code>$userModel->purgeDeleted();
// DELETE FROM `users` WHERE `users`.`deleted_at` IS NOT NULL</code></pre>



<h3 class="wp-block-heading"><span id="toc36">追加分</span></h3>



<h4 class="wp-block-heading"><span id="toc37">chunk()</span></h4>



<p>バッチなどで大量のデータを処理する場合にメモリが枯渇しないように、分割取得して処理したい場合に利用するメソッドです。</p>



<pre class="wp-block-code"><code>$userModel->where('company_code', 1)->chunk(2, static function ($data) {
    // 何かしらの処理
});
// 取得するデータが5件ある場合
// SELECT COUNT(*) AS `numrows` FROM `users` WHERE `company_code` = 1
// SELECT * FROM `users` WHERE `company_code` = 1 LIMIT 2
// SELECT * FROM `users` WHERE `company_code` = 1 LIMIT 2, 2
// SELECT *　FROM `users`　WHERE `company_code` = 1　LIMIT 4, 2</code></pre>



<h4 class="wp-block-heading"><span id="toc38">protect()</span></h4>



<p>一時的に<code>$allowedFields</code>を無視して、登録/更新したい際に利用するメソッドです。<br>seedでのテストデータ登録などで利用しますが、通常は使わないようにしましょう。</p>



<pre class="wp-block-code"><code>$userModel->protect(false)->insert($data)->protect(true); // シード実施時など、一時的に</code></pre>



<h4 class="wp-block-heading"><span id="toc39">asArray()、asObject()</span></h4>



<p>$returnTypeに指定した形式以外で取得したい場合に利用するメソッドです。</p>



<pre class="wp-block-code"><code>$userModel->asArray()->where('status', 'active')->findAll();
$userModel->asObject()->where('status', 'active')->findAll();</code></pre>



<h4 class="wp-block-heading"><span id="toc40">クエリビルダーの呼び出し</span></h4>



<p>モデルからクエリビルダーのメソッドは呼び出すことが出来ます。<br>（ビルダーからモデルのメソッドは呼び出すことは出来ません）</p>



<pre class="wp-block-code"><code>$userModel->builder();
$userModel->builder('books'); // 別テーブルのビルダーを取得</code></pre>



<p></p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.takeho.com/zpd6llieq6sm6i1710w68soctz535bi9/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
