首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel -已检索模型后的函数where()

Laravel -已检索模型后的函数where()
EN

Stack Overflow用户
提问于 2017-09-04 21:37:32
回答 1查看 76关注 0票数 0

在已经检索到模型之后,我可以使用where()函数或其他等效函数吗?例如:

代码语言:javascript
复制
    $head = Equipment::where('user_id', $fighter->id)->where('lvl_after_reduction', '<=', $fighter->attributes->lvl)->where('durability', '>', 0)
                      ->whereHas('item', function ($q) {
                          $q->where('type_id', 1);
                      })->where('wear', 1)->first();

    $torso = Equipment::where('user_id', $fighter->id)->where('lvl_after_reduction', '<=', $fighter->attributes->lvl)->where('durability', '>', 0)->whereHas('item', function ($q) {
        $q->where('type_id', 2);
    })->where('wear', 1)->first();

    if ($torso == null)
        $torso = Equipment::where('user_id', $fighter->id)->where('lvl_after_reduction', '<=', $fighter->attributes->lvl)->where('durability', '>', 0)->whereHas('item', function ($q) {
            $q->where('type_id', 3);
        })->where('wear', 1)->first();

    $hands = Equipment::where('user_id', $fighter->id)->where('lvl_after_reduction', '<=', $fighter->attributes->lvl)->where('durability', '>', 0)->whereHas('item', function ($q) {
        $q->where('type_id', 4);
    })->where('wear', 1)->first();

    $waist = Equipment::where('user_id', $fighter->id)->where('lvl_after_reduction', '<=', $fighter->attributes->lvl)->where('durability', '>', 0)->whereHas('item', function ($q) {
        $q->where('type_id', 5);
    })->where('wear', 1)->first();

    $feet = Equipment::where('user_id', $fighter->id)->where('lvl_after_reduction', '<=', $fighter->attributes->lvl)->where('durability', '>', 0)->whereHas('item', function ($q) {
        $q->where('type_id', 6);
    })->where('wear', 1)->first();

    $amulet = Equipment::where('user_id', $fighter->id)->where('lvl_after_reduction', '<=', $fighter->attributes->lvl)->where('durability', '>', 0)->whereHas('item', function ($q) {
        $q->where('type_id', 8);
    })->where('wear', 1)->first();

    $first_ring = Equipment::where('user_id', $fighter->id)->where('lvl_after_reduction', '<=', $fighter->attributes->lvl)->where('durability', '>', 0)->whereHas('item', function ($q) {
        $q->where('type_id', 9);
    })->where('wear', 1)->first();

    $secound_ring = Equipment::where('user_id', $fighter->id)->where('lvl_after_reduction', '<=', $fighter->attributes->lvl)->where('durability', '>', 0)->whereHas('item', function ($q) {
        $q->where('type_id', 9);
    })->where('wear', 2)->first();

    $right_hand = Equipment::where('user_id', $fighter->id)->where('lvl_after_reduction', '<=', $fighter->attributes->lvl)->where('durability', '>', 0)->whereHas('item', function ($q) {
        $q->whereIn('type_id', [10, 11]);
    })->where('wear', 1)->first();

我可以将这些查询合并为一个吗?因为我每个页面都有很多对数据库的查询。

对不起,我的英语不好。

EN

回答 1

Stack Overflow用户

发布于 2017-09-04 22:06:15

请将where子句组合到一个函数中,如下所示

代码语言:javascript
复制
$torso = Equipment::where([['user_id', $fighter->id], ['wear', 1]])->first();

它干净多了。

是的,可以在运行查询后使用where函数,只要它返回集合。

例如,你可以做

代码语言:javascript
复制
Equipment::all();

然后将where子句应用于它返回的集合。这样的查询返回一个eloquent collection。请转到此文档页面https://laravel.com/docs/5.5/eloquent-collections,查看所有可用于口才收集的函数。

但是,使用where子句返回以first()结尾查询的值是不可能的,因为它不返回集合。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46038304

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档