计算多个模型并将变量携带到视图的优雅方式 - laravel
elegant way to count multiple models and carry variables to a view - laravel
我正在清理我作为无可救药的菜鸟编写的代码。
我正在创建一个包含用户统计信息的视图。
我的目的是制作一个 table 来显示站点和用户统计信息,例如:
Our repository has **1000** quotes **120** of them are contributed by you.
我有几个模型,例如 Book、Quotation、Excerpt 等。
为了显示以上内容,我在我的控制器中定义了 multipe variables
$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)
...
);
然后我只有一个变量要传递给我的视图。够优雅吗?
有更好的想法吗?
首先,不要检索结果 (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
@lukasgeiter 的回答很好,但我更喜欢另一种方式,我也会在这里添加。
就个人而言,我会制定一种方法来获取模型或存储库中的计数。对于 $userCountQuotes
,我会采用另一种方式 - 也就是说,从用户而不是引号开始 - 我会使用它的内置功能。
这是一个示例,它假定模型正确相关。在用户模型中:
public function quotesCount()
{
return $this->quotes()->count();
}
在报价模型中:
public static function countAll()
{
return static::all()->count();
}
然后,在视图中传递用户并执行此操作:
Our repository has **{{ Quote::countAll() }}** quotes - **{{ $user->quotesCount() }}** of them are contributed by you.
我正在清理我作为无可救药的菜鸟编写的代码。
我正在创建一个包含用户统计信息的视图。 我的目的是制作一个 table 来显示站点和用户统计信息,例如:
Our repository has **1000** quotes **120** of them are contributed by you.
我有几个模型,例如 Book、Quotation、Excerpt 等。 为了显示以上内容,我在我的控制器中定义了 multipe variables
$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)
...
);
然后我只有一个变量要传递给我的视图。够优雅吗? 有更好的想法吗?
首先,不要检索结果 (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
@lukasgeiter 的回答很好,但我更喜欢另一种方式,我也会在这里添加。
就个人而言,我会制定一种方法来获取模型或存储库中的计数。对于 $userCountQuotes
,我会采用另一种方式 - 也就是说,从用户而不是引号开始 - 我会使用它的内置功能。
这是一个示例,它假定模型正确相关。在用户模型中:
public function quotesCount()
{
return $this->quotes()->count();
}
在报价模型中:
public static function countAll()
{
return static::all()->count();
}
然后,在视图中传递用户并执行此操作:
Our repository has **{{ Quote::countAll() }}** quotes - **{{ $user->quotesCount() }}** of them are contributed by you.