Wpis z mikrobloga

Czy jest tu może jakiś znawca frameworka dla "artystów"? Potrzebuję dostać sumę kolumny z relacji wiele-do-wielu, tak jak na tym fiddlu: http://sqlfiddle.com/#!9/348ba6/1

Dla przykładu wrzucam kod z frameworka Yii2, który to realizuje:

models/User.php:

public function getAttempts()
{
return $this->hasMany(Attempt::className(), ['user_id' => 'id']);
}

public function getQuizes()
{
return $this->hasMany(Quiz::className(), ['id' => 'quiz_id'])
->via('attempts');
}

glowny kod:

$user = Yii::$app->user->identity;
$points = $user->getQuizes()->sum('points')

Jakieś propozycje kodu w #laravel ? A może ten framework jest tak beznadziejny, że muszę ręcznie składać zapytanie?
  • 19
@jestem_mike: No dobra, to weźmy taki kod:

User.php (extend Model)

public function attempts()
{
return $this->hasMany('App\Attempt');
}

Quiz.php (extend Model)

public function attempts()
{
return $this->hasMany('App\Attempt');
}

Attempt (extend Pivot)

public function user()
{
return $this->belongsTo('App\User');
}
public function quiz()
{
return $this->belongsTo('App\Quiz');
}

główny kod

$user = Auth::user();
$points = $user->??? // i co tutaj?
via Wykop Mobilny (Android)
  • 0
@Utiopa: eh... tagi współdzielone przez Post i Video to nie relacja wiele do wielu. Przeszukałem już pół Internetu i póki co widzę że laravel jest dobry jedynie pod kątem marketingu, ale nic wiecej.
@kafapre: może tak?

$user->attempts()->pluck('sum')->sum()
W analogicznym przykładzie u mnie zadziałało jak trzeba, chyba że się pogubiłem:

\App\User::first()->posts()->pluck('votes_sum')->sum() - suma ocen ze wszystkich postów
@kafapre ale jak rzuciłem okiem to możesz użyć QueryBuilder zamiast EloquentBuilder albo je połączyć, powinno być w miarę porządnie. Nie jest to piękne rozwiązanie, ale coś za coś