Kai*_*all 2 php relationship laravel eloquent
好吧,所以我有点卡住了。我在我的项目中创建了一个小组系统。团体系统有5种型号:
我想做的是通过用户名输入搜索组中的成员。但我只将 user_id 存储在 GroupMember 模型中,而不将用户名存储在 User 模型中。我与用户模型中的组没有任何关系。
我必须建立某种关系吗?我还没有理解 Morph 关系。
以下是该集团所需的一些模型的关系列表。
团体模式
public function category() {
return $this -> belongsTo('App\GroupCategory', 'category_id');
}
public function owner() {
return $this -> hasOne('App\GroupMember', 'group_id') -> where('owner', true);
}
public function mods() {
return $this -> hasMany('App\GroupMember', 'group_id') -> where('mod', true);
}
public function members() {
return $this -> hasMany('App\GroupMember', 'group_id');
}
public function posts() {
return $this -> hasMany('App\GroupPost', 'group_id');
}
public function comments() {
return $this -> hasMany('App\GroupPostComment', 'group_id');
}
Run Code Online (Sandbox Code Playgroud)
集团成员模型
public function groups() {
return $this -> belongsToMany('App\Group');
}
public function posts() {
return $this -> hasMany('App\GroupPost');
}
public function comments() {
return $this -> hasMany('App\GroupPostComment');
}
public function user() {
return $this -> belongsTo('App\User');
}
Run Code Online (Sandbox Code Playgroud)
只是为了澄清。我有一个输入字段,管理员可以在其中输入他要查找的用户名的字母或部分内容,然后它会进行 AJAX 搜索,仅查找组中的成员,但会按用户名查找。并且 username 不在 GroupMember 模型中,而是在 User 模型中。
我该怎么做?
提前致谢。
编辑:控制器方法。
/**
* @param Group $group
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
*
* 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);
}
Run Code Online (Sandbox Code Playgroud)
所以我终于修好了!只是需要稍微修改一下奥丁雷霆的答案。
这是有效的查询。
$result = $group -> members() -> whereHas('user', function($query) use($q) {
$query -> where('name', 'LIKE', '%'. $q .'%');
}) -> get();
Run Code Online (Sandbox Code Playgroud)