2016-11-03 2 views
1

ich die folgenden Beziehungen zu meinen Modellen definiert haben eine & B:Beziehungstabelle nicht in Laravel erkannt 5

Modell A

namespace App; 

use Illuminate\Database\Eloquent\Model; 

class A extends Model { 

protected $table = 'list'; 

public function b(){ 

    return $this->hasMany('App\B', 'id', 'id'); 

    } 
} 

Modell B

namespace App; 

use Illuminate\Database\Eloquent\Model; 

class B extends Model 
{ 

protected $table = 'project'; 

public function a(){ 

    return $this->belongsTo('App\A', 'id', 'id'); 

} 

}

Ich versuche, die Summe aus dem Modell B auf die Auswahl aus dem Modell A. Jedoch basiert zu bekommen, ist es ein Fehler, wie undefinierte Eigenschaft gibt: \ Database \ Eloquent \ Collection :: $ b

Illuminate

-Controller

public function index() 
{ 
    $all = A::all()->count(); 
    $large = A::where('class', 'L')->count(); 
    $medium = A::where('class', 'M')->count(); 

    $lg = A::where('class','L')->get(); 
    $amount = $lg->b->sum('value'); 

    return view('srl')->with('large', $large) 
         ->with('medium',$medium) 
         ->with('all',$all) 
         ->with('amount',$amount); 
} 

Das Problem ist in dieser Zeile $amount = $lg->b->sum('value');. Die Beziehung scheint aus irgendeinem Grund nicht zu funktionieren. Irgendwelche Vorschläge würden geschätzt werden.

Antwort

0

Sie versuchen, eine Beziehung für eine Sammlung zu erhalten, die Beziehung besteht für die Objekte (Datensätze) in dieser Sammlung. Sie müssen die $lg Ergebnisse durchlaufen, und für jeden erhalten Sie ihre b Werte.

Etwas wie folgt aus:

$lg = A::where('class','L')->get(); 
$amount = 0; 
foreach($lg as $item) 
{ 
    $amount += $item->b->value; 
} 
0

Dank @James ... Ich musste Doppel-Loop es Arbeit zu bekommen. Ich weiß nicht, warum ich es zweimal wiederholen musste.