Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [Laravel] Eloquent poprawne zwrócenie danych
john_doe
post
Post #1





Grupa: Zarejestrowani
Postów: 873
Pomógł: 25
Dołączył: 24.07.2005

Ostrzeżenie: (0%)
-----


mam takie dwie encje

  1. public function up()
  2. {
  3. Schema::create('configurations', function (Blueprint $table) {
  4. $table->increments('id');
  5. $table->date('date_from');
  6. $table->integer('race_id');
  7. $table->timestamps();
  8. });
  9. }

w modelu mam
  1. public function parameters()
  2. {
  3. return $this->hasMany('App\Models\Parameter');
  4. }

oraz listę parametrów przypisanych do danej konfiguracji
  1. public function up()
  2. {
  3. Schema::create('parameters', function (Blueprint $table) {
  4. $table->increments('id');
  5. $table->integer('configuration_id');
  6. $table->tinyInteger('day');
  7. $table->decimal('water', 8, 3);
  8. $table->smallInteger('feed');
  9. $table->smallInteger('weight');
  10. $table->decimal('downs');
  11. $table->timestamps();


pytania z założeniami:

1. Potrzebuję wyciągnąć zsumowaną pod względem ( water, feed, weight, downs ) listę parametrów należące do configuracji o race_id in (tutaj różnie może być od jednego id po kilka) + dodatkowo jak widać mogę mieć kilka konfiguracji dla danego race_id więc potrzebują wziąć tą z najnowszą datą.

  1. $configuration = Configuration::whereIn('race_id', [1, 2])->get();


może też inaczej ,..... chciałbym osiągnąć wynik, który daje np takie zapytanie:

  1. SELECT p.[DAY], SUM(p.water), SUM(p.feed), SUM(p.weight), SUM(p.downs)
  2. FROM dbo.parameters p LEFT JOIN dbo.configurations c ON c.id = p.configuration_id
  3. INNER JOIN (
  4. SELECT race_id, MAX(date_from) AS MaxDate
  5. FROM dbo.configurations
  6. GROUP BY race_id
  7. ) tm ON c.race_id = tm.race_id AND c.date_from = tm.MaxDate
  8. WHERE c.race_id IN (1,2)
  9. GROUP BY p.[DAY]
  10. ORDER BY 4;


czyli potrzebuję wybrać najnowszą konfigurację dla danego race_id. W przypadku kilku race_id wziąć najnowszą konfigurację i dodać ja do najnowszego konfiguracji z kolejnego race_id

Chciałbym to wyciągnąc ładnie ORM i nie uzywać plain query.
Czy ktoś z Was ma pomysł?

Ten post edytował john_doe 10.05.2018, 14:37:05
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
SmokAnalog
post
Post #2





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

Ostrzeżenie: (0%)
-----


Każdy with() robi osobne zapytanie, więc posortować po tym rzeczywiście nie ma jak. Ale już join powinien dać radę. Nie ma co na siłę unikać tych joinów, one działają nie tylko z czystym query builderem, ale też z modelami. Zgadzam się jednak, że przydałaby się w Eloquencie możliwość budowania pojedynczych zapytań z relacjami i w sumie nie wiem co stało na przeszkodzie.
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 15.10.2025 - 09:10