関連するフィルターキーが存在することに依存する ORM where 呼び出しを作成したいようです。次のコードは、あなたが探していることを実行するはずです。それは私にとってはうまくいきます。
Role
key-name/field-name の区別 ( vs. )が許可されていない場合は、より適切になりますRoleId
。
application/classes/Model/Object
:
class Model_Object extends ORM {
// Map from filter key names to model field names
protected static $_filter_map = array(
'Role' => 'RoleId',
// ...
);
public static function get_objects($filters = array())
{
$objects = ORM::factory('object');
foreach($filters as $key => $value)
{
if ($field = Arr::get(self::$_filter_map, $key))
{
$operator = (is_array($value)) ? 'IN' : '=';
$objects->where($field, $operator, $value);
} else {
throw new Kohana_Exception(
'Unknown filter key :key',
array(':key' => $key)
);
}
}
return $objects->find_all();
}
}
いくつかの例、最初にすべてのオブジェクト:
Model_Object::get_objects( array() );
RoleId が 2 のすべてのオブジェクト:
Model_Object::get_objects( array('Role' => 2) );
role_id が (2,3,5) AND user_id = 1 のすべてのオブジェクト:
Model_Object::get_objects( array(
'Role' => array(2,3,5),
'User' => 1
) );
この最後のものには、次のものが必要であることに注意してください。
protected static $_filter_map = array(
'Role' => 'role_id',
'User' => 'user_id', // where `user_id` is a db field name
// ...
);
get_objects
または関数を変更/簡素化する
$objects = ORM::factory('object');
foreach($filters as $key => $value)
{
$field = Arr::get(self::$_filter_map, $key, $key);
$operator = is_array($value) ? 'IN' : '=';
$objects->where($field, $operator, $value);
}
return $objects->find_all();