我又有一个问题..所以,这次我需要从我的控制器发送计算数据来查看。 我发送简单数据没有问题,例如:
// Controller
public function index() {
$page = Page::whereAlias('products');
$products = Product::all();
$data = compact('page', 'products');
return View::make('products', $data);
}
//View
@foreach ($products as $product)
{{ $product->title }}
@endforeach
但在我的项目中,我需要计算每个产品的折扣,如果折扣日期是正确的,请将其显示为折扣产品。 同时计算该产品的评级,评论数量等。我有正确的关系和模型。
在我的项目中,我有下一个代码(我认为这不正确):
// Controller
public function index() {
$page = Page::whereAlias('products');
$products = Product::all();
$data = compact('page', 'products');
return View::make('products', $data);
}
//View
<?php
$discount_count = 0;
$rating_count = 0;
$reviews_count = 0;
?>
@foreach ($products as $product)
{{ $product->title }}
<?php
foreach ($product->rating as $rating) { $rating_count++; }
?>
{{ $rating_count }}
<?php
foreach ($product->reviews as $review) { $review_count++; }
?>
{{ $review_count }}
@if ($product->discount_date_start > $current_date < $discount_date_end)
{{ $product->price - $product-discount }}
{{ round($product->discount / ($product->price / 100)); }}% // discount in percents
@else
{{ $product->price }}
@endif
@endforeach
据我所知,所有计算都必须在控制器中?但是如何..? 谢谢。
答案 0 :(得分:0)
所有计算实际上都不应该在控制器或视图中,但是大多数其他类会将其称为存储库,但这可能超出了问题的范围。它也可以在视图或控制器中工作,但是如果你没有用于处理这个逻辑的存储库类,它就会进入控制器!
只需遍历控制器中的产品,并为您拥有的所有数据添加属性即可。这是未经测试的,但它应该接近你需要的。
// Controller
public function index() {
$page = Page::whereAlias('products');
$products = Product::all();
foreach($products as $product) {
if($product->dicount_rate_start > $current_date < $discount_date_end) {
$product->total = $product->price - $product->discount;
$product->round = round($product->discount / $product->price / 100);
} else {
$product->total = $product->price;
$product->round = '';
}
}
$data = compact('page', 'products');
return View::make('products', $data);
}
//View
@foreach ($products as $product)
{{ $product->title }}
{{ $product->rating->count() }}
{{ $product->reviews->count() }}
{{ $product->total }}
{{ $product->round }}
@endforeach
您还可以使用count()
方法简化添加评论和评分的逻辑。