Model_Crud メソッド

例として使われているクラスは、Model_Crud を継承したものとします。

forge($data = array())

forge メソッドは、新しい Model_Crud クラスのインスタンスを返します。

静的 はい
パラメータ
パラメータ デフォルト 説明
$data array
array()
新しいインスタンスの値。
返り値 継承したクラス (Model_Crud の子) の新しいインスタンス。
// 新しいインスタンスを取得
$user = Model_User::forge();

// 値を持った新しいインスタンス
$user = Model_User::forge(array(
	'name' => 'John',
	'surname' => 'Doe',
	'email' => 'john@doe.org',
));

find_by_pk($value)

find_by_pk メソッドは、主キーからレコードを検索します。内部では find_one_by メソッドを使用します。

静的 はい
パラメータ
パラメータ デフォルト 説明
$value mixed 必須 探したい主キーの値。
返り値 結果を含む Model_Crud インスタンス、見つからない場合は null
// 条件が `id` = 2 のレコードを取得
$user = Model_User::find_by_pk(2);

if ($user === null)
{
	// 見つからない
}
else
{
	// 見つかった
	echo $user->email;
}

find_one_by($column, $value = null, $operator = '=')

find_one_by メソッドは、与えられたカラムと値から 1 つのレコードを検索します。内部では find メソッドを使用します。

静的 はい
パラメータ
パラメータ デフォルト 説明
$column string 必須 使いたいカラム。
$value mixed
null
調べたい値。
$operator string
'='
使いたい演算子。
返り値 結果を含む Model_Crud インスタンス、見つからない場合は null
// 条件が `email` = "info@example.com" のレコードを取得
$user = Model_User::find_one_by('email', 'info@example.com');

if ($user === null)
{
	// 見つからない
}
else
{
	// 見つかった
	echo $user->email;
}

find_by($column = null, $value = null, $operator = '=', $limit = null, $offset = 0)

find_by メソッドは、与えられたカラムと値にマッチする全てのレコードを検索します。オプションとして演算子、limit や offset を与えることができます。内部では find メソッドを使用します。

静的 はい
パラメータ
パラメータ デフォルト 説明
$column string 必須 使用したいカラムまたは where 句の配列。
$value mixed
null
調べたい値。
$operator string
'='
使いたい演算子。
$limit int
null
limit 句。
$offset int
0
offset 句。
返り値 結果を含む Model_Crud インスタンスの配列、見つからない場合は null
// SELECT * FROM `users` WHERE `email` LIKE "%@example.com" LIMIT 5 OFFSET 10
$users = Model_User::find_by('email', '%@example.com', 'like', 5, 10);

// Select * FROM `users` WHERE `name` = "John" AND `surname` LIKE "%Surname%" LIMIT 10
$users = \Model_User::find_by(array(
	'name' => 'John',
	array('surname', 'like', '%Surname%'),
), null, null, 10);

if ($users === null)
{
	// 見つからない
}
else
{
	foreach($users as $user)
	{
		// $user で何かをする
	}
}

find_by_*($value = null)

これはマジックメソッドです。メソッド名の find_by_ の後の部分に検索したいカラムの名前を指定することができます。


// これは、 $user = Model_User::find_by('email', 'foo@example.com'); と同じ
$user = Model_User::find_by_email('foo@example.com');

find_one_by_*($value = null)

これは 1 つのレコードを返すマジックメソッドです。メソッド名の find_one_by_ の後の部分に検索したいカラムの名前を指定することができます。


// これは、 $user = Model_User::find_one_by('email', 'foo@example.com'); と同じ
$user = Model_User::find_one_by_email('foo@example.com');

find_all($limit = null, $offset = 0)

find_all メソッドは、オプションの limit と offset を使い全てのレコードを検索します。内部では find メソッドを使用します。

静的 はい
パラメータ
パラメータ デフォルト 説明
$limit int
null
limit 句。
$offset int
0
offset 句。
返り値 結果を含む Model_Crud インスタンスの配列、見つからない場合は null
// SELECT * FROM `users` LIMIT 10 OFFSET 20
$users = Model_User::find_all(10, 20);

find($config = array(), $key = null)

find メソッドは、クエリに影響を与える条件の配列を使って全てのレコードを検索します。

このメソッドは、最初の引数として クロージャ も受け取ります。クロージャが与えられた場合、それが呼び出されて (クロージャに) Database_Query オブジェクトが送られます。これを使って、クエリが実行される前にクエリを修正することができます。クロージャは、修正した Database_Query オブジェクトを返さなければいけません。

このメソッドは、他の検索メソッドの全てに使われています。カスタムな検索をしたい場合に限って使用したほうがよいでしょう。

静的 はい
パラメータ
パラメータ デフォルト 説明
$config array|Closure
array()
条件の配列またはクエリを修正するクロージャ。
$key string
null
結果の配列キーとして使うために、これをテーブルのカラムにセットする。
返り値 結果を含む Model_Crud インスタンスの配列、見つからない場合は null
基本的な使用法
$users = Model_User::find(array(
	'select' => array('id', 'name', 'email'),
	'where' => array(
		array('name', 'like', '%Name%'),
		'suspended' => 'no',
		array('id', 'in', array(1, 2, 3, 4)),
	),
	'order_by' => array(
		'name' => 'asc',
		'surname' => 'desc',
	),
	'limit' => 10,
	'offset' => 20,
));

キーを使った基本的な使用法
$users = Model_User::find(array(
	'where' => array(
		'active' => 'yes',
		'banned' => 'no',
	),
	'order_by' => array('id' => 'desc'),
), 'id');

クロージャを使った高度な使用法
$users = Model_User::find(function ($query)
{
	return $query->join('roles')
	             ->on('roles.id', '=', 'users.role_id')
	             ->where('roles.name', 'admin');
});

pre_find(&$query)

実行する前にクエリを変更するために、 pre_find メソッドを置き換えます。

静的 はい
パラメータ
パラメータ デフォルト 説明
$query \Query_Builder_Select オブジェクト 必須 クエリオブジェクト。
返り値 Void
// モデルの中で
protected static function pre_find(&$query)
{
	// クエリを変更
	$query->where('active', 'yes');
}

post_find($result)

返す前に結果を変更するために、 post_find メソッドを置き換えます。

静的 はい
パラメータ
パラメータ デフォルト 説明
$key \Query_Builder_Select オブジェクト 必須 レコードが見つからない場合は Null 、または結果の配列。
返り値 結果 (配列または null) を返す。
// モデルの中で
protected static function post_find($result)
{
	if ($result !== null)
	{
		// 結果の配列を変更
	}

	// 結果を返す
	return $result;
}

set($values)

set メソッドは、現在のモデルインスタンスに値の配列をセットします。

静的 いいえ
パラメータ
パラメータ デフォルト 説明
$values array 必須 値の配列。
返り値 現在のモデルインスタンス。
$user = Model_User::forge()->set(array(
	'name' => 'My Name',
	'surname' => 'My Surname',
));

save($validate = true)

save メソッドは、レコードを挿入または更新します。

静的 いいえ
パラメータ
パラメータ デフォルト 説明
$validate boolean
true
バリデーションを実行するかどうか。
返り値 バリデーションを通らなかった場合は False 、挿入した場合は挿入の結果、更新した場合は更新の結果。
$user = Model_User::forge()->set(array(
	'name' => 'My Name',
	'surname' => 'My Surname',
));

// 新しいユーザを挿入
$result = $user->save();

$user = Model_User::find_by_pk(2);

$user->name = 'New Name';

// ユーザを更新
$user->save();

// バリデーションを実行せずに更新
$user->save(false);

delete()

delete メソッドは、レコードを削除します。

静的 いいえ
パラメータ なし
返り値 削除クエリの結果、変更された行の数。
$user = Model_User::find_by_pk(2);
if ($user)
{
	// ユーザを削除
	$user->delete();
}

is_new($new = null)

is_new メソッドは、レコードが新しいかをチェックします、または新しいかそうでないかをセットします。

静的 いいえ
パラメータ
パラメータ デフォルト 説明
$new null|bool
null
レコードが新しいかどうかをセットするために boolean を与えます。
返り値 現在のインスタンス。
$user = Model_User::forge(array(
	'id' => 3,
	'name' => 'John',
	'surname' => 'Otherdoe',
));

$user->is_new(false);

// 更新
$user->save();

count($column = null, $distinct = true, $where = array(), $group_by = null)

count メソッドは、列をカウントして返します。

Static はい
パラメータ
パラメータ デフォルト 説明
$column string
null
カウントするカラムの名前。与えられなかった場合、主キーを使います。
$distinct boolean
true
distinct 句のクエリを実行するかしないか。
$where array
array()
結果に検索条件をつける where 句の配列。
$group_by string
null
group by するカラム。
返り値 Mixed 。カウントしたクエリの結果の整数、またはクエリが失敗した場合は false 。
// テーブルの中の全てのレコードをカウント
$nbr_of_records = Model_User::count();

// 結果のカウントに管理者ユーザだけをフィルタ
$nbr_of_records = Model_User::count('id', true, array('group', '=', 100));

frozen($frozen = null)

frozen メソッドは、レコードが凍結されているかをチェックします、または凍結するかしないかをセットします。

静的 いいえ
パラメータ
パラメータ デフォルト 説明
$frozen null|bool
null
レコードを凍結させるかどうかをセットするために boolean を与えます。
返り値 現在のインスタンス。
$user = Model_User::find_by_pk(2);
$user->frozen(true);

// 凍結したオブジェクトは誰も変更することができません...

$user->frozen(false);
// これで再び使うことができる。

validation()

validation メソッドは、モデルの validation インスタンスを (作成し) 返す。

静的 いいえ
パラメータ なし
返り値 Validation インスタンス。
$user = Model_User::find_by_pk(2);
$validation_object = $user->validation();

validates()

validates メソッドは、インスタンスがバリデーションをパスするかどうかを返します。

静的 いいえ
パラメータ なし
返り値 結果の boolean 。
$model = new Model_User;
$model->set(array(
	'name' => 'John',
	'surname' => 'Doe',
));

if ($model->validates())
{
	// モデルが有効、バリデーションを通過。
	$model->save(false)
}
else
{
	// モデルが無効
}

to_array()

to_array メソッドは、モデルの public の変数を返します。

静的 いいえ
パラメータ なし
返り値 array
$user = Model_User::find_by_pk(2);
$user_array = $user->to_array();

pre_save(&$query)

挿入する前にクエリを変更するために、 pre_save メソッドを置き換えます。

静的 いいえ
パラメータ
パラメータ デフォルト 説明
$query \Database_Query_Builder_Insert オブジェクト 必須 挿入クエリオブジェクト
返り値 Void
// モデルの中で
protected function pre_save(&$query)
{
	// conditionally add a where clause
	if ($something)
	{
		$query->where('field', '=', $something);
	}
}

post_save($result)

挿入した結果に変更や振舞いを行うために、 post_save メソッドを置き換えます。

静的 いいえ
パラメータ
パラメータ デフォルト 説明
$result array 必須 挿入した結果の配列。
返り値 挿入した結果の配列。
// モデルの中で
protected function post_save($result)
{
	// 結果を使って何かをする
	return $result;
}

pre_update(&$query)

更新する前にクエリを変更するために、 pre_update メソッドを置き換えます。

静的 はい
パラメータ
パラメータ デフォルト 説明
$query \Database_Query_Builder_Update オブジェクト 必須 更新クエリオブジェクト。
返り値 Void
// モデルの中で
protected function pre_update(&$query)
{
	// 更新クエリを変更。
	$query->set(array('field' => 'value'));
}

post_update($result)

更新クエリの結果を変更するために、 post_update メソッドを置き換えます。

静的 いいえ
パラメータ
パラメータ デフォルト 説明
$result int 必須 変更された行の数。
返り値 更新クエリオブジェクト。
// モデルの中で
protected function post_update($result)
{
	// 結果を使って何かをする
	return $result;
}

pre_delete(&$query)

削除する前にクエリを変更するために、 pre_delete メソッドを置き換えます。

静的 いいえ
パラメータ
パラメータ デフォルト 説明
$query \Database_Query_Builder_Delete オブジェクト 必須 削除クエリオブジェクト。
返り値 Void
// モデルの中で
protected function pre_delete(&$query)
{
	// 削除クエリを使って何かをする
}

post_delete($result)

削除した結果を変更するために、 post_delete メソッドを置き換えます。

静的 いいえ
パラメータ
パラメータ デフォルト 説明
$result int 必須 変更された行の数。
返り値 変更された行の数。
// モデルの中で
protected function post_delete($result)
{
	// 結果を使って何かをする
	return $result;
}

pre_validate($data)

バリデーションの前に挿入か更新されたデータを変更するために、 pre_validate メソッドを置き換えます。

静的 いいえ
パラメータ
パラメータ デフォルト 説明
$data array 必須 モデルのレコードデータ。
返り値 モデルのレコードデータ。
// モデルの中で
protected function pre_validate($data)
{
	// データを使って何かをする
	return $data;
}

post_validate($data)

バリデーションの後に挿入か更新されたデータを変更するために、 post_validate メソッドを置き換えます。

静的 いいえ
パラメータ
パラメータ デフォルト 説明
$data array 必須 モデルのレコードデータ。
返り値 モデルのレコードデータ。
// モデルの中で
protected function post_validate($data)
{
	// データを使って何かをする
	return $data;
}

prep_values($data)

バリデーションまたはクエリを実行する前に挿入か更新されたデータを変更するために、 prep_values メソッドを置き換えます。

静的 いいえ
パラメータ
パラメータ デフォルト 説明
$data array 必須 モデルのレコードデータ。
返り値 モデルのレコードデータ。
// モデルの中で
protected function prep_values($data)
{
	// データを使って何かをする
	return $data;
}