I have this query:

 $tournament = Tournament::with(
            'championships',
            'championships.settings',
            'championships.category',
            'championships.tree.users',
        )->first();

现在,它给了我所有附加的锦标赛.

我需要的是获得锦标赛,但只需要与我拥有的$request->championshipId个冠军相匹配的冠军.

当然,我也想要这个过滤在所有其他的关系里('championships.settings', 'championships.category','championships.tree.users')

推荐答案

You can use Constraining Eager Loading like this:

$tournaments = Tournament::with(['championships' => function ($query) {
    $query->where('something', 'like', '%this%');
},
'championships.settings' => function ($query) {
    $query->where('something', 'like', '%this%');
},
...])->get();

Laravel相关问答推荐

Inertiajs - 使用链接组件添加记录但无法在不使用表单的情况下清除文本区域

在 blade laravel 中以格式编号显示长数字

LARVAL SAVE 中的关系有

如何将用户对象绑定到中间件中的请求

Laravel:在失败时处理 findOrFail()

Laravel 没有定义

laravel:如何在 Eloquent Query 中使用 LOWERCASE 函数?

Laravel Nova - 重新排序左侧导航菜单项

升级到 Laravel 5.2 会使所有会话失效

如何利用 StorageFacade 的 Filesystem 类的 glob 方法?

在 laravel 6.0 中未定义命令ui

Laravel 5 干预中的图像验证

Laravel 的 toSql() 方法是否会屏蔽 id? (列值被问号替换)

嘲笑没有匹配的关闭处理程序

Laravel 中的单会话登录

Laravel Eloquent 多态一对一?

Elastic search全文与mysql全文?

Laravel 5.2 验证错误未出现在Blade中

在 Laravel 中翻译特定语言

连接到 tcp://smtp.mail.yahoo.com:465 超时