多个通过关系(未链接)的Laravel雄辩

多个通过关系(未链接)的Laravel雄辩,laravel,eloquent,laravel-5.6,Laravel,Eloquent,Laravel 5.6,这是我的情况的一个简单例子: 有一个模型User,它有一个UserInfo 我想通过(where)不同的UserInfo列检索用户,但我不想将所有where链接起来,特别是我不想将->get()链接到where子句的末尾 我读过的所有解决方案示例和文档都会导致以->get()结尾的无休止的链接。由于某种原因,whereHas在我将get移到下一行时也会停止工作。也许我的语法错了 我更喜欢使用雄辩,但如果只有使用DB类才能实现这样的效果,我不会介意 Expample(简化但仅此而已): 这很好用。

这是我的情况的一个简单例子:

有一个模型
User
,它有一个
UserInfo

我想通过(where)不同的UserInfo列检索用户,但我不想将所有where链接起来,特别是我不想将
->get()
链接到where子句的末尾

我读过的所有解决方案示例和文档都会导致以
->get()
结尾的无休止的链接。由于某种原因,
whereHas
在我将get移到下一行时也会停止工作。也许我的语法错了

我更喜欢使用雄辩,但如果只有使用DB类才能实现这样的效果,我不会介意

Expample(简化但仅此而已):

这很好用。但是(除了当关系在其他情况下非常强大时,成为单个
的奇怪代码膨胀之外),我想删除
用户::
->get()从那里开始。意思是希望实现这样的目标:

$user = new User;

$user->whereHas('UserInfo', function($query) use ($request) {
     return $query->where('gender', $request->gender);
});

return $user->get();
对于想阅读更多代码的人,这里是完整的代码片段

    $user = new User;
    if(! empty($request->gender))
    {
        $user->whereHas('UserInfo', function($query) use ($request) {
            $query->where('gender', $request->gender);
        });
    }
    if(! empty($request->role_id))
    {
        $user->whereHas('UserInfo', function($query) use ($request) {
            $query->where('role_id', $request->role_id);
        });
    }

    $applicant = $user->get();

但是我不想把所有的东西都拴在一起为什么你不需要使用这种方法你能详细说明一下吗?还可以包括一些代码来设置一个你想怎么做的示例我添加了一些更多的信息和一些示例代码。非常感谢。我想这应该可以完成你的工作了,
$user=$user->whereHas….
哦,所以我必须为每个where一次又一次地将它重新分配给$user。我想现在可以了。谢谢!:)不,您不需要为每个位置重新分配,新更新的代码也应该可以工作
    $user = new User;
    if(! empty($request->gender))
    {
        $user->whereHas('UserInfo', function($query) use ($request) {
            $query->where('gender', $request->gender);
        });
    }
    if(! empty($request->role_id))
    {
        $user->whereHas('UserInfo', function($query) use ($request) {
            $query->where('role_id', $request->role_id);
        });
    }

    $applicant = $user->get();