拉拉韦雄辩地寻找姓名关系



好吧,所以我有点卡住了。我在我的项目中创建了一个组系统。集团系统有5种型号:

  1. 集团
  2. 组类别
  3. 组成员
  4. GroupPost
  5. GrouPostComment

我要做的是通过用户名输入搜索组中的成员。但我只在GroupMember模型中存储user_id,而在user模型中不存储usernamewich。我还没有与用户模型中的组建立任何关系。

我有什么关系吗?我还没有理解Morph关系。

以下是该集团的关系列表——一些所需的模型。

集团模型

public function category() {
return $this -> belongsTo('AppGroupCategory', 'category_id');
}
public function owner() {
return $this -> hasOne('AppGroupMember', 'group_id') -> where('owner', true);
}
public function mods() {
return $this -> hasMany('AppGroupMember', 'group_id') -> where('mod', true);
}
public function members() {
return $this -> hasMany('AppGroupMember', 'group_id');
}
public function posts() {
return $this -> hasMany('AppGroupPost', 'group_id');
}
public function comments() {
return $this -> hasMany('AppGroupPostComment', 'group_id');
}

GroupMember模型

public function groups() {
return $this -> belongsToMany('AppGroup');
}
public function posts() {
return $this -> hasMany('AppGroupPost');
}
public function comments() {
return $this -> hasMany('AppGroupPostComment');
}
public function user() {
return $this -> belongsTo('AppUser');
}

只是为了澄清。我有一个输入字段,管理员可以在其中键入他要查找的用户名的字母或部分,然后它进行AJAX搜索,只查找组中的成员,但按用户名查找。username不在GroupMember模型中,而是在User模型中。

我该怎么做?

提前谢谢。

编辑:控制器方法。

/**
* @param Group $group
* @return IlluminateContractsViewFactory|IlluminateViewView
*
* Manage users
*/
public function getManageUsers(Group $group) {
$group = $group -> with('members.user');
// Usernames can be "test0", "test1", "test2"
// If i search "1" only "test1" should be in the result
$yourSearchQuery = '1';
// The query
$result = $group -> whereHas('members', function ($query) use ($yourSearchQuery) {
$query -> whereHas('user', function ($query) use ($yourSearchQuery) {
$query -> where('name', 'LIKE', '%'. $yourSearchQuery .'%');
});
}) -> get();
// Check the results manually
// It still returns all members of the group
dd($result);
}

所以我终于修复了它!只需要稍微修改一下奥丁雷霆的回答。

这就是有效的查询。

$result = $group -> members() -> whereHas('user', function($query) use($q) {
$query -> where('name', 'LIKE', '%'. $q .'%');
}) -> get();

您可以通过关系获取数据,例如:

$group = Group::first();
return $group->members->user

别忘了:

use (namespace of group model)

搜索:

$yourSearchQuery-string我们必须找到

$group = Group::with('members.user');
$result = $group -> whereHas('members', function ($query) use ($yourSearchQuery) {
$query -> whereHas('user', function ($query) use ($yourSearchQuery) {
$query->where('name', 'LIKE', '%'. $yourSearchQuery .'%');
}
})->get();

最新更新