Model_Crud 方法

使用範例的类別是假設它擴充 Model_Crud 类別。

forge($data = array())

forge 方法回傳一个新的 Model_Crud 类別實例。

靜態
參数
參数 类型 預設 描述
$data 陣列
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 混合 必要 要尋找的主鍵值。
回傳 一个有已載入結果的 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 方法藉由所給的行與值尋找一筆紀錄,內部使用 find 方法。

靜態
參数
參数 类型 預設 描述
$column 字串 必要 要使用的行。
$value 混合
null
要檢查的值。
$operator 字串
'='
要使用的運算子
回傳 一个有已載入結果的 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 方法尋找所有吻合所給的行與值的紀錄,你可選擇性的給運算子、限制及偏移,內部使用 find 方法。

靜態
參数
參数 类型 預設 描述
$column 字串 必要 要使用的行或一个 where 語句的陣列。
$value 混合
null
要檢查的值。
$operator 字串
'='
要使用的運算子。
$limit 整数
null
限制。
$offset 整数
0
偏移。
回傳 一个有已載入結果的 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)

这是一个回傳单筆紀錄的魔術方法,你可以藉由修改 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 方法可選擇性的使用限制與偏移來尋找所有紀錄。內部使用 find 方法。

靜態
參数
參数 类型 預設 描述
$limit 整数
null
限制。
$offset 整数
0
偏移。
回傳 一个有已載入結果的 Model_Crud 實例陣列,當沒找到時 null。
範例
// SELECT * FROM `users` LIMIT 10 OFFSET 20
$users = Model_User::find_all(10, 20);

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

find 方法使用一个影響查詢的條件陣列尋找所有紀錄。

此方法也接受一个 閉包(closure) 做为第一个參数,當一个閉包(closure)被傳送時,它被呼叫并傳送一个 Database_Query 物件。你可以使用此方法在查詢执行前去修改它,閉包(closure)應該回傳修改的 Database_Query 物件。

此方法被所有其他 find 方法使用,當建立自訂的尋找程序時,你也應該使用它。

靜態
參数
參数 类型 預設 描述
$config 陣列|閉包(closure)
array()
條件陣列或一个閉包(closure)以修改查詢。
$key 字串
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');

使用閉包(closure)的進階用法
$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 物件 必要 查詢物件。
回傳
範例
// 在你的模型
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 陣列 必要 值的陣列。
回傳 目前的模型實例。
範例
$user = Model_User::forge()->set(array(
	'name' => 'My Name',
	'surname' => 'My Surname',
));

save($validate = true)

save 方法新增或更新一筆資料。

靜態
參数
參数 类型 預設 描述
$validate 布林
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 方法刪除一筆紀錄。

靜態
參数
回傳 Delete 查詢結果,受影響的筆数。
範例
$user = Model_User::find_by_pk(2);
if ($user)
{
	// 刪除使用者
	$user->delete();
}

is_new($new = null)

is_new 方法檢查是否为新的紀錄,或設定它是否为新。

靜態
參数
參数 类型 預設 描述
$new null|布林
null
提供一个布林值以設定紀錄是否为新。
回傳 目前的實例。
範例
$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 方法回傳一个資料列計数。

靜態
參数
參数 类型 預設 描述
$column 字串
null
要計数的行名稱。如果沒給,主鍵会被使用。
$distinct 布林
true
是否执行一个相異值的查詢。
$where 陣列
array()
要篩選結果的 where 子句的陣列。
$group_by 字串
null
要群組的行。
回傳 混合。計数查詢的整数結果,或 false 在查詢失敗時。
範例
// 計数資料表中的所有紀錄
$nbr_of_records = Model_User::count();

// 只計数管理使用者的篩選結果数
$nbr_of_records = Model_User::count('id', true, array('group', '=', 100));

frozen($frozen = null)

frozen 方法檢查是否为凍結的紀錄,或設定它是否为凍結。

靜態
參数
參数 类型 預設 描述
$frozen null|布林
null
提供一个布林值以設定紀錄是否为凍結。
回傳 目前的實例。
範例
$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 方法回傳實例是否能通過驗證。

靜態
參数
回傳 一个成功的布林。
範例
$model = new Model_User;
$model->set(array(
	'name' => 'John',
	'surname' => 'Doe',
));

if ($model->validates())
{
	// 模型是有效的,跳過驗證。
	$model->save(false)
}
else
{
	// 模型是無效的
}

to_array()

to_array 方法回傳模型的公開變数。

靜態
參数
回傳 陣列
範例
$user = Model_User::find_by_pk(2);
$user_array = $user->to_array();

pre_save(&$query)

取代 pre_save 方法以在新增前修改查詢。

靜態
參数
參数 类型 預設 描述
$query \Database_Query_Builder_Insert 物件 必要 Insert 查詢物件。
回傳
範例
// 在你的模型
protected function pre_save(&$query)
{
	// 變更查詢
	$query->set(array('field' => 'value'));
}

post_save($result)

取代 post_save 方法以在新增結果修改/行动。

靜態
參数
參数 类型 預設 描述
$result 陣列 必要 新增結果陣列。
回傳 新增結果陣列。
範例
// 在你的模型
protected function post_save($result)
{
	// 對結果做处理
	return $result;
}

pre_update(&$query)

取代 pre_update 方法以在更新前修改查詢。

靜態
參数
參数 类型 預設 描述
$query \Database_Query_Builder_Update 物件 必要 Update 查詢物件。
回傳
範例
// 在你的模型
protected function pre_update(&$query)
{
	// 變更 Update 查詢。
	$query->set(array('field' => 'value'));
}

post_update($result)

取代 post_update 方法以修改 Update 查詢結果。

靜態
參数
參数 类型 預設 描述
$result 整数 必要 受影響的筆数。
回傳 Update 查詢物件。
範例
// 在你的模型
protected function post_update($result)
{
	// 對結果做处理
	return $result;
}

pre_delete(&$query)

取代 pre_delete 方法以在刪除前修改查詢。

靜態
參数
參数 类型 預設 描述
$query \Database_Query_Builder_Delete 物件 必要 Delete 查詢物件。
回傳
範例
// 在你的模型
protected function pre_delete(&$query)
{
	// 對刪除查詢做处理
}

post_delete($result)

取代 post_delete 方法以修改刪除結果。

靜態
參数
參数 类型 預設 描述
$result 整数 必要 受影響的筆数。
回傳 受影響的筆数。
範例
// 在你的模型
protected function post_delete($result)
{
	// 對結果做处理
	return $result;
}

pre_validate($data)

取代 pre_validate 方法以在驗證前修改新增/更新資料。

靜態
參数
參数 类型 預設 描述
$data 陣列 必要 模型的紀錄資料。
回傳 模型的紀錄資料。
範例
// 在你的模型
protected function pre_validate($data)
{
	// 對資料做处理
	return $data;
}

post_validate($data)

取代 post_validate 方法以在驗證後修改新增/更新資料。

靜態
參数
參数 类型 預設 描述
$data 陣列 必要 模型的紀錄資料。
回傳 模型的紀錄資料。
範例
// 在你的模型
protected function post_validate($data)
{
	// 對資料做处理
	return $data;
}

prep_values($data)

取代 prep_values 方法以在驗證或查詢执行前修改新增/更新資料。

靜態
參数
參数 类型 預設 描述
$data 陣列 必要 模型的紀錄資料。
回傳 模型的紀錄資料。
範例
// 在你的模型
protected function prep_values($data)
{
	// 對資料做处理
	return $data;
}