【问题标题】:Laravel Eloquent ORM whereHas with a foreach loopLaravel Eloquent ORM whereHas 带有 foreach 循环
【发布时间】:2017-05-20 08:34:53
【问题描述】:

以下是关系:

一个用户有很多技能,有一个连接表user_skills。我需要搜索此表以返回具有特定技能的配置文件。这是正在构建的更大查询的一部分,这就是为什么这里没有 ->get() 的原因。

用户模型

/**
 * A user may have many skills
 *
 * @return \Illuminate\Database\Eloquent\Relations\BelongsToMany
 */
public function skills()
{
    return $this->hasMany('App\Core\Platform\Models\UserSkill');
}

下面是没有做我需要的查询。我需要它根据搜索中传递的 ID($this->misc['search_skills'] 值)返回具有特定技能的用户。

// Skills
$this->user = $this->user->whereHas('skills', function ($q)
{
     foreach ($this->misc['search_skills'] AS $skill)
     {           
          $q->orWhere('id', $skill);
     }
});

关于我做错了什么或如何以不同的方式执行此操作的任何想法?

【问题讨论】:

  • 我认为你可以使用 whereIn(,'skills' []) 这将是我的攻击方法

标签: php laravel laravel-5 orm eloquent


【解决方案1】:
$skills = $this->misc['search_skills']; // assuming this is an array
$this->user = $this->user->whereHas('skills', function ($q) use ($skills)
{
     $q->whereIn('id', $skills);
});

当您最终在同一字段上多次使用 orWhere 时,您很可能应该使用 whereIn。

将搜索技能放入一个变量 ($skills),将该变量导入到您的回调中,使用 use,然后使用 whereIn。

【讨论】:

    猜你喜欢
    • 2014-09-30
    • 2018-03-20
    • 2021-08-23
    • 1970-01-01
    • 2019-12-28
    • 2017-06-09
    • 2020-09-16
    • 2021-04-27
    • 1970-01-01
    相关资源
    最近更新 更多