0

最初に2つのモデルがあります:

class Tutorial extends Eloquent {

protected $table = 'tutorials'; 

public function rating()
{
    return $this->hasMany('Rating');
}   

}

と:

class Rating extends Eloquent {

protected $table = 'ratings';

public  $timestamps = false;

public function tutorial()
{
    return $this->belongsTo('Tutorial');
}   
}

今私のコントローラに私はこれを持っています:

public function get_index() {

    $tutorials = tutorial::orderBy('created_at', 'desc')
        ->with('rating')
        ->paginate(25);

    return View::make('site/home/index')->with('tutorials', $tutorials);
}

では、ビュー内の 1 つのチュートリアルからすべての評価を取得するにはどうすればよいでしょうか?!

編集:

今私はこれを持っています:

public function ratings()
{
    return $this->hasMany('Rating');
}   

public function getRating()
{
    // Grab the ratings from this tutorial
    $ratings = $this->ratings;
    $summedRatings = 0;

    // Loop through them all and add them together
    foreach($ratings as $rating)
    {
        console.log($rating->value);
        $summedRatings += $rating->value;
    }

    // Return the calculated average
    return $summedRatings / count($ratings);
}

public function get_index() {

    $tutorials = Tutorial::with('ratings')
        ->with('user')
        ->orderBy('created_at', 'desc')
        ->paginate(25);

    return View::make('site/home/index')->with('tutorials', $tutorials);
}

そして私の見解では:

@foreach($tutorials as $tutorial)
<span>{{$tutorial->rating}}</span>

@endforeach

しかし、すべての < span > は空です!

更新:私がこれを行う場合:

@foreach($tutorials as $tutorial)

            @foreach($tutorial->ratings as $rate)

            <span>{{$rate->value}}</span>

            @endforeach

すべてが良いです....それで、何が問題なのですか?

4

2 に答える 2

2

サイトのプラットフォームに応じて、常に正しい大文字と小文字を使用する必要があります。

$tutorials = tutorial::orderBy(...) // Wrong

$tutorials = Tutorial::orderBy(...) // Correct

レーティングを熱心にロードするには、常に「with」メソッドを何よりも先に宣言する必要があります。

$tutorials = Tutorial::with('rating')
                 ->orderBy('created_at', 'DESC')
                 ->paginate(25);

これは、何らかの理由で、L4 ドキュメントから除外されています。

ビューでは、これで評価にアクセスできるようになりました

foreach($tutorials as $tutorial)
{
    echo $tutorial->rating->{rating table column name};
}
于 2013-08-09T15:55:10.430 に答える
0

まず、命名規則に関する限り、物事を理解しやすくするために:rating()チュートリアル メソッド内のメソッドを呼び出す必要があるratings()ため、評価を取得すると見栄えが良くなります ( $tutorial->ratings)

これの名前を変更した後、ビューで $tutorials の配列をループしながら、次のようにそれぞれの評価にアクセスできます。

foreach($tutorials as $tutorial)
{
    $ratings = $tutorial->ratings;
}

それぞれの評価オブジェクトを取得します。

知っておくべきことは、ORM オブジェクトの代わりに評価の計算を返す必要がある場合は、モデルのプロパティを作成できることです。

たとえば、各評価がamount列に格納された評価テーブルの 1 ~ 5 の数値である場合、これを実行して、各評価の平均をプロパティとして設定できます。

class Tutorial extends Eloquent {

protected $table = 'tutorials'; 

public function ratings()
{
    return $this->hasMany('Rating');
}  

public function getRating()
{
    // Grab the ratings from this tutorial
    $ratings = $this->ratings;
    $summedRatings = 0;

    // Loop through them all and add them together
    foreach($ratings as $rating)
    {
        $summedRatings += $rating->amount;
    }

    // Return the calculated average
    return $summedRatings / count($ratings);
}

}

次に、ビューで、プロパティをデータベースの一部であるかのようにエコーアウトできます

foreach($tutorials as $tutorial)
{
    echo $tutorial->rating;
}
于 2013-08-09T15:56:10.770 に答える