优雅的方式来计算多个模型并将变量携带到视图中 - laravel

时间:2015-01-01 08:08:20

标签: php variables laravel laravel-4

我正在清理我作为无望的菜鸟写的代码。

我正在创建一个包含用户统计信息的视图。 我的目的是制作一个显示网站和用户统计信息的表格,例如:

Our repository has **1000** quotes **120** of them are contributed by you.

我有几个模型,如Book,Quotation,Excerpt等。 为了显示上述内容,我在我的控制器中定义了多重变量

$userCountQuotes = count(Quote::where('creator_id','=',$userid)->get());
$CountQuotes = count(Quote::get());

然后以这种方式传递

return View::make('userworkspace.stats', compact('userCountQuotes','CountQuotes'))

我有大约10种不同的模型可供使用 - 20个变量。是否有更优雅的方式来获取数字并在视图中显示它们?

我自己的解决方案:创建一个二维数组值

$stats= array
(
array("Books",22,18),
array("Quotes",15,13)
...
);

然后我只有一个变量传递给我的视图。那够优雅吗? 有更好的想法吗?

2 个答案:

答案 0 :(得分:2)

首先,您应该使用get()方法,而不是检索结果(count())然后使用count(),这将使用引擎下的SQL计数

$userCountQuotes = Quote::where('creator_id', '=', $userid)->count();
$CountQuotes = Quote::count();

现在将它传递给视图id使用一个不同结构的数组:

$stats = array
(
    'Books' => array(
        'total' => 22,
        'user' => 18
    ),
    'Quotes' => array(
        'total' => 15,
        'user' => 13
    )
)

这就是你的观点看起来像什么

@foreach($stats as $type => $values)
    Our repository has {{ $values['total'] }} {{ $type }} {{ $values['user'] }} of them are contributed by you.
@endforeach

答案 1 :(得分:0)

@ lukasgeiter的答案很好,但我更喜欢我在这里添加的另一种方式。

就个人而言,我会创建一个方法来获取模型或存储库中的计数。我会反过来寻找$userCountQuotes - 也就是说,从用户开始而不是引号 - 我会使用内置功能。<​​/ p>

这是一个例子,假设模型正确相关。在用户模型中:

public function quotesCount()
{
    return $this->quotes()->count();
}

在Quote模型中:

public static function countAll()
{
    return static::all()->count();
}

然后,在视图中,传递用户并执行以下操作:

Our repository has **{{ Quote::countAll() }}** quotes - **{{ $user->quotesCount() }}** of them are contributed by you.