chcę zrobić listę wszystkich dostępnych produktów oraz kwoty za rozmiarze jaklaravel dostać kwotę rozmiar jeśli nie istnieją 0
name | size1 | size2 | size 3 | size4 | total
________________________________________________________
t-shirt1 | 0 | 1 | 3 | 9 | 13
t-shirt2 | 3 | 1 | 1 | 9 | 14
t-shirt3 | 0 | 0 | 0 | 0 | 0
My Product
modelu ma związek z ProductSize
jak:
public function sizeAvailable(){
return $this->hasMany('App\ProductSize');
}
My ProductSize
ma związek z Product
jak:
public function product()
{
return $this->belongsTo('App\Product');
}
My productSize
ma związek z Size
jak:
public function size(){
return $this->belongsTo('App\Size');
}
Model ProductSize zawiera wartość kwoty. Więc jestem w stanie uzyskać wszystkie rozmiary dla produktu o odpowiedniej ilości, a także jestem w stanie uzyskać wszystkie produkty od rozmiaru. Jak mogę utworzyć listę tak, jak w moim przykładzie. Czy można używać rozmiaru jako indeksu? więc mogłem zrobić (pseudo kod), aby wypełnić <td>
tagi:
for(all products)
{
if(product[somesize] not null)
{{ product[somesize]->amount }}
else
0
}
Problem mam to, że nie wiem jak ustawić kwotę w <tr>
stołu jeśli jest na przykład 1 rozmiarze (size3) i żadnych innych, gdy robię $product->sizeAvailable()
będzie zawierał tylko 1 wartość (size3), więc muszę umieścić 0 pod rozmiar1, ale jak mogę sprawdzić, czy rozmiar 1 nie jest dostępny dla produktu? Czy istnieje lepszy sposób na wypełnienie kwot wielkości tabeli?
Co Obecnie mam:
<table id="myTable" class="tablesorter table table-striped table-responsive">
<thead>
<tr>
<th>
Product
</th>
@foreach($sizes as $size)
<th>
{{ $size->name }}
</th>
@endforeach
</tr>
</thead>
<tbody>
@foreach($products as $product)
<tr >
<td>
{{ucfirst($product->name)}}
</td>
@foreach($sizes as $size)
<td>
HERE I NEED TO DO A CHECK IF $product HAS $size RETURN 0 ELSE RETURN ProductSize->amount
</td>
@endforeach
</tr>
@endforeach
</tbody>
</table>
mogę utworzyć funkcję w modelu produktu podobnego:
hasSize($size)
{
$result = select from ProductSize where size = $size
if ($result = null)
return 0;
return $result->amount();
}
Ale z tego rozwiązania muszę uruchomić kwerendę products * sizes
razy, jeśli mam 1000 produkty i 20 rozmiarów, co dałoby mi 20 000 zapytań za jeden stół.
____________________________
Relevant Database data
____________________________
products
-id (primary key)
-name
sizes
-id (primary key)
-name
product_sizes
-pr (primary key)
-prodcut_id
-size_id
-amount
Czy bawiłeś się agregatami ([tutaj] (https://laravel.com/docs/5.2/eloquent#retrieving-aggregates) & [tutaj] (https://laravel.com/docs/5.2/queries # ordering-grouping-limit-and-offset)) dla tego problemu Sven? – Theson
Muszę przyznać, że dołączenie do SQL lub nawet widok oparty na tym byłby dobrze dopasowany - wciąż próbowałem dostarczyć rozwiązanie oparte na całej Laravel, aby pokazać, jak daleko może się posunąć. – luchaos
to "Właściwe dane z bazy danych" u dołu kompletne? wspomniałeś, że model ProductSizes zawiera wartość dla 'amount' - czy tabela' product_sizes' ma tę kolumnę? – luchaos