我正在学习框架,现在使用它构建一个应用程序。
我需要获取所有具有“用户”或“员工”角色的用户,但我在文档中找不到它。
帮助任何人?(我认为这更像是 auth 模块的 ORM 问题)
我正在学习框架,现在使用它构建一个应用程序。
我需要获取所有具有“用户”或“员工”角色的用户,但我在文档中找不到它。
帮助任何人?(我认为这更像是 auth 模块的 ORM 问题)
我没有找到使用 ORM 的简单方法,但我有一个解决方法。
这是我的代码,适用于任何可能遇到与我相同问题的人。
// One for each role
$staffs = ORM::factory('role', array('name' => 'staff'))->users->find_all()->as_array();
$managers = ORM::factory('role', array('name' => 'manager'))->users->find_all()->as_array();
// Merge the results
$results = array_merge($staffs, $managers);
也许你应该为它创建一个单独的 ORM 方法?像这样的代码:
public function get_users(array $roles)
{
$users = DB::select(array($this->_has_many['roles']['foreign_key'], 'id'))
->distinct(TRUE)
->from($this->_has_many['roles']['through'])
->where($this->_has_many['roles']['far_key'], 'IN', DB::expr('('.implode(',', $roles).')'))
->execute($this->_db);
if (count($users) == 0)
{
// return empty list
return array();
}
// now we need only IDs from result
$ids = array();
foreach($users as $columns)
{
$ids[] = $columns['id'];
}
// load users by id
return $this->where($this->_primary_key, 'IN', DB::expr('('.implode(',', $ids).')'))->find_all();
}
$roles 是一个 role_id 数组(不是名称!)。PS。我不记得如何查询“WHERE IN”,所以我使用 DB 表达式。