Sha*_*dow 2 laravel eloquent laravel-4
我想计算属于标签的帖子数量.我应该使用方法还是动态属性?
<?php
class Tag extends Eloquent {
public function posts()
{
return $this->belongsToMany('Post');
}
public function postsCount()
{
return count($this->posts);
}
public function getPostsCountAttribute()
{
return count($this->posts);
}
}
Run Code Online (Sandbox Code Playgroud)
所以在模板中我应该使用动态属性:
{{ $tag->postCount }}
Run Code Online (Sandbox Code Playgroud)
或方法:
{{ $tag->postCount() }}
Run Code Online (Sandbox Code Playgroud)
摘自Laravel 4关于Eloquent 动态属性(访问者)关系的文档(粗体是我的):
Eloquent允许您通过动态属性访问您的关系.Eloquent会自动为您加载关系,甚至足够聪明,可以知道是调用get(一对多关系)还是第一个(一对一关系)方法.然后可以通过动态属性访问它,其名称与关系相同.
也就是说,使用为数据库关系定义的方法或动态属性(访问器)将表现不同.
如果使用以下方法发布帖子计数:
$count = $tag->posts()->count();
Run Code Online (Sandbox Code Playgroud)
这将生成具有COUNT聚合函数的正确SQL.
另一方面,如果使用动态属性(访问者)发出帖子计数,如下所示:
$count = count($tag->posts);
Run Code Online (Sandbox Code Playgroud)
这将获取所有帖子,将它们转换为对象数组,然后计算数组元素的数量.
在您的情况下,选择应取决于与标签相关的帖子的用法.如果您只想计算,则使用方法和聚合函数.但是,如果除了计算你将使用这些帖子做其他事情,然后使用动态属性(访问者).
归档时间: |
|
查看次数: |
3513 次 |
最近记录: |