Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何从控制器获取计算数据以查看和显示它(laravel)?_Php_View_Laravel_Controller - Fatal编程技术网

Php 如何从控制器获取计算数据以查看和显示它(laravel)?

Php 如何从控制器获取计算数据以查看和显示它(laravel)?,php,view,laravel,controller,Php,View,Laravel,Controller,我又有一个问题。。所以,这次我需要将计算出的数据从我的控制器发送到视图。 我对发送简单数据没有问题,例如: // Controller public function index() { $page = Page::whereAlias('products'); $products = Product::all(); $data = compact('page', 'products'); return View::make('products', $data); } //Vi

我又有一个问题。。所以,这次我需要将计算出的数据从我的控制器发送到视图。 我对发送简单数据没有问题,例如:

// 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
据我所知,所有计算必须在控制器中进行?但是怎么。。?
谢谢。

所有的计算实际上不应该在控制器或视图中,而是一个附加类,大多数人会将其称为存储库,但这可能超出了问题的范围。它也可以在视图或控制器中工作,但是如果您没有用于处理此逻辑的存储库类,它将进入控制器

只需遍历控制器中的产品,并为每个产品添加所需数据的属性。这是未经测试的,但它应该接近您所需要的

// 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方法简化添加评论和评级的逻辑。

我不确定您是否可以在模板引擎中使用PHP代码?击败了使用模板引擎的全部要点。。。此外,您应该在控制器内部执行所有逻辑,并将变量传递给视图。。这就是控制器的用途。我知道,但我不知道如何在控制器中计算它,并在视图中显示它:/maybe可用于此计算中的模型?不过,我不知道:只要把循环放在控制器里。。。然后将数据作为变量传递给视图。如果我得到1000个产品,它就是1000个新变量?还是我不明白如何为每个产品添加一个新变量?我想从根本上讲,我不了解您的代码。。您正试图根据您的产品设置3个变量:折扣、评分和评论。。只需计算并从控制器传递这些数据,然后将产品作为您当前正在执行的阵列或数据集…谢谢您的回答。我想写这样的东西,但我被2个foreach循环弄糊涂了。它不会慢下来吗?如果我有1000次迭代?我认为它实际上应该快一点,而不必循环这些迭代。