首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel -获取所有记录,而不只是第一个?

Laravel -获取所有记录,而不只是第一个?
EN

Stack Overflow用户
提问于 2017-01-04 16:26:38
回答 3查看 2.2K关注 0票数 0

今天,我面临着Laravel的一个问题。我想要做的是为government_type = higher_government的每个记录获取每个'stat‘值。顺便说一下,我是不同类型的,但这只是众多类型中的一种。

代码语言:javascript
复制
$higherGovernment = Cache::remember('government.higher_government', 1, function() {
    return GovernmentRole::where('government_type', 'higher_government')->first()->stats;
});

我如何才能获得所有类型的所有统计信息,而不只是调用->first()?

我尝试删除->first(),但它不做任何事情,只给我这个错误:

代码语言:javascript
复制
Undefined property: Illuminate\Database\Eloquent\Builder::$stats

顺便说一句,stats是一种关系:

代码语言:javascript
复制
    public function stats(){
       return $this->hasMany('App\Database\Website\User\Roleplay', 'government_id');
   }
EN

回答 3

Stack Overflow用户

发布于 2017-01-04 18:19:14

尝尝这个

代码语言:javascript
复制
\App\YourModelName::select('fields')->where('condition')->get();
票数 1
EN

Stack Overflow用户

发布于 2017-01-04 16:35:23

如果您只想要此表中的一列,则可以使用select函数来指明您想要的列。

如下所示:

代码语言:javascript
复制
<?php
    $higherGovernment = Cache::remember('government.higher_government', 1, function() {
        return GovernmentRole::where('government_type', 'higher_government')->select('stats')->get();
    });

集合$higherGovernment现在将包含带有一个参数statsGovernmentRole对象。

如果您希望它是一个仅包含stats属性的数组,您可以使用集合将这个值从其中pluck出来。如下所示:

代码语言:javascript
复制
<?php
    $higherGovernment = Cache::remember('government.higher_government', 1, function() {
        return GovernmentRole::where('government_type', 'higher_government')->select('stats')->get()->pluck('stats');
    });

更新:

既然我们知道eager load是一个关系,我认为最好的解决方案就是加载所有的stats对象并对这个关系执行统计操作。然后,您可以显示每个GovernmentRole的统计数据。

你可以这样做:

代码语言:javascript
复制
<?php
    $higherGovernment = Cache::remember('government.higher_government', 1, function() {
        return GovernmentRole::where('government_type', 'higher_government')->with('stats')->get();
    });

    // Just an example on how to get the stats
    foreach ($g in $higherGovernment)
        echo $g->stats->count();
票数 0
EN

Stack Overflow用户

发布于 2017-01-04 16:45:58

你可以做的是在关系中做一个选择,我想,就像这样:

代码语言:javascript
复制
public function stats(){
   return $this->hasMany('App\Database\Website\User\Roleplay', 'government_id')->select('stats')->get(); 
}

在这种情况下,这将删除关系,但您将获得统计数据。另一种方法是直接从关系中获取统计数据,如下所示:

代码语言:javascript
复制
GovernmentRole::where('government_type', 'higher_government')->first()->stats->select('stats')->get();

或者,如果出现错误,请尝试:

代码语言:javascript
复制
GovernmentRole::where('government_type', 'higher_government')->first()->stats()->select('stats')->get();
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41459252

复制
相关文章

相似问题

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