Laravel 雄辩地搜索名称关系

Kai*_*all 2 php relationship laravel eloquent

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

  1. 团体
  2. 组别
  3. 集团成员
  4. 群邮
  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)

Kai*_*all 5

所以我终于修好了!只是需要稍微修改一下奥丁雷霆的答案。

这是有效的查询。

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