【问题标题】:issue in laravel relationship search datalaravel 关系搜索数据中的问题
【发布时间】:2021-10-25 16:25:13
【问题描述】:

我想从用户表中搜索用户名。

我使用了 Laravel 关系(雄辩)。我不从用户表中搜索用户名。我的代码在下面,在这里我解释与所有平板电脑的关系

我在组控制器中有一个查询写入

    public function getGroupsData(Request $request){
      $group = Group::with(['memberscount', 'getusername'])->where('groupName', "like", "%" . $request->searchText . "%")
        ->whereHas('getusername.user', function ($query) use ($request) {
            return $query->where('name', 'like', '%'. $request->searchText . '%');
           })
        ->get();
    }

memberscount和getusername关系写入组模型我的组模型如下

class Group extends Model
{
    
    public function memberscount(){    
        return $this->hasMany('App\Models\Members', 'group_id', 'id')->where('memberStatus', 'Joined');
    }

    public function getusername(){    
        return $this->hasOne('App\Models\Members', 'group_id', 'id')->where('isOwner', 0);
    }
}

和成员模型中的用户表关系。成员模型如下

class Members extends Model
{   
    public function user(){
        return $this->hasOne('App\User', 'id', 'user_id');
    }

    /**get group name */
    public function group(){
        return $this->hasOne('App\Models\Group', 'id', 'group_id');
    }
}

我有搜索用户的数据 this(user) 关系。但我无法搜索多级关系中的数据。

【问题讨论】:

  • 我认为您需要查看文档。搜索whereHas()
  • @GertB。我也尝试过 whereHas() 但不工作
  • 你可以添加你尝试过的代码吗?问题暂时不清楚
  • @GertB。我已经添加了我尝试过的代码。

标签: laravel eloquent foreign-keys eloquent-relationship


【解决方案1】:

好的,我第一步是重命名类Group中的名称关系

我认为这是更合乎逻辑的名称

memberscount -> members
getusername -> owner

第二步是搜索。我是这样写的:

$group = Group::whereHas('owner', function ($query) use ($request) {
 return $query->where('groupName', 'like', '%'. $request->searchText . '%');
})->get();

或者更有效和更清晰的代码,我们可以像这样保存在我们查询的范围内:

$group = Group::whereHas('owner', function ($query) use ($request) {
 return $query->haveGroupName($request->searchText);
})->get();

Group 模型类中编写如下代码:

     /**
     * Scope a query to only have groupName.
     *
     * @param  \Illuminate\Database\Eloquent\Builder  $query
     * @param  string $param
     * @return \Illuminate\Database\Eloquent\Builder
     */
    public function scopeHaveGroupName($query, $param)
    {
        return $query->where('groupName', 'like', '%' . $param . '%');
    }

【讨论】:

  • 我搜索了 groupName 和 userName。在此解决方案中仅搜索组名。我想搜索组名和用户名。用户名搜索关系在成员模型中
  • @JinalGajera 如果您可以添加对组名的搜索,则对用户名的搜索基本相同。答案向您展示了它是如何完成的。
  • @JinalGajera 你可以先关闭whereHas 添加->orWhereHas() 并再次编写新的whereHas,但名称关系不同
猜你喜欢
  • 1970-01-01
  • 2019-11-23
  • 2017-12-13
  • 2015-10-30
  • 2015-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多