Я хочу составить список со всеми доступными продуктами и размером за один размер, например
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
Моя модель Product
имеет отношение с ProductSize
следующим образом:
public function sizeAvailable(){
return $this->hasMany('App\ProductSize');
}
My ProductSize
имеет отношение с Product
как:
public function product()
{
return $this->belongsTo('App\Product');
}
My ProductSize
имеет отношение с Size
как:
public function size(){
return $this->belongsTo('App\Size');
}
Модель ProductSize содержит значение для суммы.
Так что я могу получить все размеры для продукта с нужной суммой, а им также можно получить все продукты размером. Как создать список, как в моем примере. Можно ли использовать размер как индекс? поэтому я мог бы сделать (псевдокод), чтобы заполнить теги <td>
:
for(all products)
{
if(product[somesize] not null)
{{ product[somesize]->amount }}
else
0
}
Проблема заключается в том, что я не знаю, как установить количество в <tr>
таблицы, если есть, например, 1 размер (размер3), а другие нет, когда я делаю $product->sizeAvailable()
, он будет содержать только 1 (размер3), поэтому мне нужно разместить 0 под size1, но как я могу проверить, не доступен ли размер1 для продукта?
Или есть лучший способ заполнить суммы размера таблицы?
В настоящее время у меня есть:
<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>
Я мог бы сделать функцию в модели продукта, например:
hasSize($size)
{
$result = select from ProductSize where size = $size
if ($result = null)
return 0;
return $result->amount();
}
Но с этим решением я должен запустить запрос products * sizes
раз, если у меня есть 1000 продуктов и 20 размеров, что бы запросить 20 000 запросов для одной таблицы.
____________________________
Relevant Database data
____________________________
products
-id (primary key)
-name
sizes
-id (primary key)
-name
product_sizes
-pr (primary key)
-prodcut_id
-size_id
-amount