voglio fare un elenco con tutti i prodotti disponibili e l'importo per dimensioni comelaravel ottenere quantità dimensioni, se non esiste 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
Il mio modello Product
ha una relazione con ProductSize
come:
public function sizeAvailable(){
return $this->hasMany('App\ProductSize');
}
mio ProductSize
ha una relazione con Product
come:
public function product()
{
return $this->belongsTo('App\Product');
}
mio productSize
ha una relazione con Size
come:
public function size(){
return $this->belongsTo('App\Size');
}
Il modello Productsize contiene un valore per importo. Quindi sono in grado di ottenere tutte le taglie per un prodotto con la giusta quantità, e sono anche in grado di ottenere tutti i prodotti da una dimensione. Come posso creare la lista come nel mio esempio. È possibile utilizzare la dimensione come indice? così ho potuto fare (pseudo codice) per riempire le <td>
tag:
for(all products)
{
if(product[somesize] not null)
{{ product[somesize]->amount }}
else
0
}
Il problema che ho è che non so come impostare la quantità nel <tr>
alla tabella se v'è ad esempio 1 formato (size3) e nessun altro quando faccio $product->sizeAvailable()
conterrà solo 1 valore (size3), quindi devo inserire 0 in size1 ma come posso verificare se size1 non è disponibile per il prodotto? O c'è un modo migliore per riempire gli importi delle dimensioni del tavolo?
Quello che ho attualmente:
<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>
ho potuto fare una funzione in modello del prodotto simile:
hasSize($size)
{
$result = select from ProductSize where size = $size
if ($result = null)
return 0;
return $result->amount();
}
Ma con questa soluzione devo eseguire una query products * sizes
volte, se ho 1000 prodotti e 20 taglie, pari a 20.000 querys per un tavolo.
Ti sei divertito con gli aggregati ([qui] (https://laravel.com/docs/5.2/eloquent#retrieving-aggregates) e [qui] (https://laravel.com/docs/5.2/query # ordering-grouping-limit-and-offset)) per questo problema Sven? – Theson
Devo ammettere che anche un join SQL o anche una vista basata su questo sarebbe stato un buon adattamento - ho comunque provato a fornire una soluzione all-Laravel per mostrare quanto lontano può andare. – luchaos
è il 'Dati del database pertinente' nella parte inferiore completa? hai menzionato che il modello ProductSizes contiene un valore per 'amount' - anche la tabella' product_sizes' ha questa colonna? – luchaos