如何从Controller获取计算数据并查看并显示它(laravel)?

时间:2014-06-06 12:17:51

标签: php view laravel controller

我又有一个问题..所以,这次我需要从我的控制器发送计算数据来查看。 我发送简单数据没有问题,例如:

// 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

据我所知,所有计算都必须在控制器中?但是如何..? 谢谢。

1 个答案:

答案 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()方法简化添加评论和评分的逻辑。