2017-01-04 11 views
-2

今日私はLaravelの問題に直面しています。私がしたいことは、government_type = higher_governmentのすべてのレコードのすべての 'stat'値を取得することです。ところで、私は種類が異なりますが、これは多くの人のひとりです。Laravel - 最初だけでなく、すべてのレコードを取得しますか?

$higherGovernment = Cache::remember('government.higher_government', 1, function() { 
    return GovernmentRole::where('government_type', 'higher_government')->first()->stats; 
}); 

- > first()を呼び出すのではなく、すべてのタイプのすべての統計情報を取得するにはどうすればよいですか?

public function stats(){ 
     return $this->hasMany('App\Database\Website\User\Roleplay', 'government_id'); 
    } 
+0

未定義のメソッドを呼び出す\データベース\クエリ\ビルダー::すべて()?? – Ashkru

+0

これは、first()を削除したときと同じエラーが発生します。 – Ashkru

+0

未定義のプロパティ:Illuminate \ Database \ Eloquent \ Collection :: $ stats – Ashkru

答えて

0

の場合:ところで関係がある

Undefined property: Illuminate\Database\Eloquent\Builder::$stats 

統計:>最初の()しかし、私は、このエラーを与える以外には何もしません -

私は削除しようとしていますこの表から1つの列だけが必要な場合は、select関数を使用して、必要なものを示すことができます。そのよう

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

コレクション$higherGovernmentは今つのパラメータ、statsGovernmentRoleオブジェクトが含まれます。

これをstatsプロパティのみの配列にしたい場合は、コレクションをpluckの値で使用できます。そのような:

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

更新:今、私たちは統計は、私は最善の解決策は、ちょうどすべてのGovernmentRoleオブジェクトとeager load関係をロードすることだと思う関係であることを知っていることを

。その後、GovernmentRoleごとに統計情報を表示することができます。あなたはこのようにそれを行うことができます

:あなたは何ができるか

<?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

これを使ってみました。次のエラーが表示されます。未定義のプロパティ:Illuminate \ Database \ Eloquent \ Collection :: $ user – Ashkru

+0

私はstat()が列ではなく、関係であることを理解したいと考えています。 – Ashkru

+0

public function stats(){ $ this-> hasMany( 'App \ Database \ Website \ User \ Roleplay'、 'government_id')を返します。 } – Ashkru

-1

は関係の選択の権利を行うが、私はこのように、と思う:

public function stats(){ 
    return $this->hasMany('App\Database\Website\User\Roleplay', 'government_id')->select('stats')->get(); 
} 

これは、その場合には削除します関係、しかしあなたは統計を得るだろう。

GovernmentRole::where('government_type', 'higher_government')->first()->stats->select('stats')->get(); 

またはそれはあなたにエラートライを与える場合:

GovernmentRole::where('government_type', 'higher_government')->first()->stats()->select('stats')->get(); 
+0

「メソッド選択が存在しません。 2番目のコードオプションを実行するとエラーが発生しますが、3番目のコードオプションは同じではありません。私は最初にやってみたいと思っています。 – Ashkru

+0

「ロールプレイ」モデルを「ロール」と呼ばれる別個のリレーションに分けて、次に、統計のために2番目のリレーションを持つことができます。実際には、リレーションを使用してスキップし、モデルに直接アクセスするだけです(例: 'Roleplay :: where(' some_post '、' some_value ') - > select(' stats ') - > get();' – Alx101

+0

これは雄弁なクエリービルダーオブジェクトではないので、メソッドは存在しません。そこに悪い。 @ Jerodevが指摘したように、あなたは冗談を使うことができます。 – Alx101

0

はこの

を試してみて、それを行うための別の方法は、単に、すぐに、このような関係から統計情報を取得することです\ App \ YourModelName :: SELECT( 'fields') - > WHERE( '条件') - > GET();

関連する問題