如果用户属于 October CMS 中的组 - 用户插件
If user belongs to group in October CMS - User plugin
我正在尝试从 PHP 的组件中的特定用户组中过滤用户。
首先,我根据关键字搜索特定用户,接下来我想测试该用户是否属于某个特定组 'mygroupcode'。理想情况下,应将这两个语句结合起来。
我试过以下方法:
public function onSelect() {
$s2_opts = [];
foreach(User::where('surname', 'LIKE', '%'.Input::get('q').'%')->orWhere('name', 'LIKE', '%'.Input::get('q').'%')->get() as $user) {
if($user->groups()->whereName('mygroupcode')->exists()) {
array_push($s2_opts, array('id' => $user->id, 'text' => $user->name . ' ' . $user->surname));
}
}
return json_encode($s2_opts);
}
这会引发 MySQL 错误。找不到 table mydb.groups
之类的东西...在数据库中,它应该寻找 user_groups。
此外,我已经尝试过:
public function onSelect() {
$s2_opts = [];
foreach(User::where('surname', 'LIKE', '%'.Input::get('q').'%')->orWhere('name', 'LIKE', '%'.Input::get('q').'%')->get() as $user) {
if(in_array('mygroupcode',array_keys($user->groups))) {
array_push($s2_opts, array('id' => $user->id, 'text' => $user->name . ' ' . $user->surname));
}
}
return json_encode($s2_opts);
}
这也会产生 MySQL 错误。类似的,还有关于tablegroups
没有找到
此外,我注意到有一个名为 inGroup() 的方法,但这会产生相同的错误...
public function onSelect() {
$s2_opts = [];
foreach(User::where('surname', 'LIKE', '%'.Input::get('q').'%')->orWhere('name', 'LIKE', '%'.Input::get('q').'%')->get() as $user) {
if($user->inGroup('mygroupcode')) {
array_push($s2_opts, array('id' => $user->id, 'text' => $user->name . ' ' . $user->surname));
}
}
return json_encode($s2_opts);
}
我做错了什么?预先感谢您的宝贵时间。
请注意以下相关问题。他们是关于 后端用户列表 ,我希望过滤掉前端用户。
我依靠查询生成器设法获得了一个可行的解决方案。我怀疑这是最佳解决方案,但目前它正在运行。如果谁有更好的解决方案,请告诉我:
public function onSelect() {
$s2_opts = [];
foreach(User::select('users.id', 'users.surname', 'users.name')
->join('users_groups', 'users.id', '=', 'users_groups.user_id')
->join('user_groups', 'users_groups.user_group_id', '=', 'user_groups.id')
->where('user_groups.code','mygroupcode')
->where(function ($query) {
$query->where('users.surname', 'LIKE', '%'.Input::get('q').'%')->orWhere('users.name', 'LIKE', '%'.Input::get('q').'%');
})
->groupBy('users.id')
->get() as $user) {
array_push($s2_opts, array('id' => $user->id, 'text' => $user->name . ' ' . $user->surname));
}
return json_encode($s2_opts);
}
如果您查看 InGroup
函数,参数不是字符串(代码)而是对象:
/**
* See if the user is in the given group.
* @param Group $group
* @return bool
*/
public function inGroup($group)
{
foreach ($this->getGroups() as $_group) {
if ($_group->getKey() == $group->getKey()) {
return true;
}
}
return false;
}
您可以向您的用户组模型添加一个方法,比方说:
const GROUP_ADMIN = 'admin'; // admin is the group unique code
public static function getAdminGroup()
{
return self::where('code', self::GROUP_ADMIN)->first() ;
}
然后你可以用这个方法来检查用户是否在组中
public function onSelect() {
$q = Input('q', false );
if (!empty ($q)) {
$users = User::searchWhere( $q , 'surname' )
->searchWhere( $q , 'name' )
->get();
if ( count ($users) ) {
$s2_opts = [];
$users->each( function( $user ) {
if( $user->inGroup( UserGroupModel::getAdminGroup() )) {
// User is in Group... Push to Array
}
});
return json_encode($s2_opts);
} else {
// No users found...
}
}
}
另请查看 filter 方法,您可以 return 根据某些条件过滤集合
$filteredUsers = $users->filter(function ( $user ) {
return $user->inGroup( UserGroupModel::getAdminGroup() ) ;
});
我正在尝试从 PHP 的组件中的特定用户组中过滤用户。 首先,我根据关键字搜索特定用户,接下来我想测试该用户是否属于某个特定组 'mygroupcode'。理想情况下,应将这两个语句结合起来。
我试过以下方法:
public function onSelect() {
$s2_opts = [];
foreach(User::where('surname', 'LIKE', '%'.Input::get('q').'%')->orWhere('name', 'LIKE', '%'.Input::get('q').'%')->get() as $user) {
if($user->groups()->whereName('mygroupcode')->exists()) {
array_push($s2_opts, array('id' => $user->id, 'text' => $user->name . ' ' . $user->surname));
}
}
return json_encode($s2_opts);
}
这会引发 MySQL 错误。找不到 table mydb.groups
之类的东西...在数据库中,它应该寻找 user_groups。
此外,我已经尝试过:
public function onSelect() {
$s2_opts = [];
foreach(User::where('surname', 'LIKE', '%'.Input::get('q').'%')->orWhere('name', 'LIKE', '%'.Input::get('q').'%')->get() as $user) {
if(in_array('mygroupcode',array_keys($user->groups))) {
array_push($s2_opts, array('id' => $user->id, 'text' => $user->name . ' ' . $user->surname));
}
}
return json_encode($s2_opts);
}
这也会产生 MySQL 错误。类似的,还有关于tablegroups
没有找到
此外,我注意到有一个名为 inGroup() 的方法,但这会产生相同的错误...
public function onSelect() {
$s2_opts = [];
foreach(User::where('surname', 'LIKE', '%'.Input::get('q').'%')->orWhere('name', 'LIKE', '%'.Input::get('q').'%')->get() as $user) {
if($user->inGroup('mygroupcode')) {
array_push($s2_opts, array('id' => $user->id, 'text' => $user->name . ' ' . $user->surname));
}
}
return json_encode($s2_opts);
}
我做错了什么?预先感谢您的宝贵时间。
请注意以下相关问题。他们是关于 后端用户列表 ,我希望过滤掉前端用户。
我依靠查询生成器设法获得了一个可行的解决方案。我怀疑这是最佳解决方案,但目前它正在运行。如果谁有更好的解决方案,请告诉我:
public function onSelect() {
$s2_opts = [];
foreach(User::select('users.id', 'users.surname', 'users.name')
->join('users_groups', 'users.id', '=', 'users_groups.user_id')
->join('user_groups', 'users_groups.user_group_id', '=', 'user_groups.id')
->where('user_groups.code','mygroupcode')
->where(function ($query) {
$query->where('users.surname', 'LIKE', '%'.Input::get('q').'%')->orWhere('users.name', 'LIKE', '%'.Input::get('q').'%');
})
->groupBy('users.id')
->get() as $user) {
array_push($s2_opts, array('id' => $user->id, 'text' => $user->name . ' ' . $user->surname));
}
return json_encode($s2_opts);
}
如果您查看 InGroup
函数,参数不是字符串(代码)而是对象:
/**
* See if the user is in the given group.
* @param Group $group
* @return bool
*/
public function inGroup($group)
{
foreach ($this->getGroups() as $_group) {
if ($_group->getKey() == $group->getKey()) {
return true;
}
}
return false;
}
您可以向您的用户组模型添加一个方法,比方说:
const GROUP_ADMIN = 'admin'; // admin is the group unique code
public static function getAdminGroup()
{
return self::where('code', self::GROUP_ADMIN)->first() ;
}
然后你可以用这个方法来检查用户是否在组中
public function onSelect() {
$q = Input('q', false );
if (!empty ($q)) {
$users = User::searchWhere( $q , 'surname' )
->searchWhere( $q , 'name' )
->get();
if ( count ($users) ) {
$s2_opts = [];
$users->each( function( $user ) {
if( $user->inGroup( UserGroupModel::getAdminGroup() )) {
// User is in Group... Push to Array
}
});
return json_encode($s2_opts);
} else {
// No users found...
}
}
}
另请查看 filter 方法,您可以 return 根据某些条件过滤集合
$filteredUsers = $users->filter(function ( $user ) {
return $user->inGroup( UserGroupModel::getAdminGroup() ) ;
});