【发布时间】:2015-01-06 19:56:23
【问题描述】:
我有一对多关系 - Entry 可以有多个 Visits。
在我的Entry 模型中,我有以下方法:
public function visits() {
return $this->hasMany ('Visit', 'entry_id','id');
}
public function visitsCount() {
return $this->hasMany('Visit', 'entry_id','id')
->selectRaw('SUM(number) as count')
->groupBy('entry_id');
}
在 Blade 中,我可以使用以下方法获取我的条目的访问次数:
{{$entry->visits()->count() }}
或
{{ $entry->visitsCount()->first()->count }}
如果我想创建访问器来获取访问次数,我可以定义:
public function getNrVisitsAttribute()
{
$related = $this->visitsCount()->first();
return ($related) ? $related->count : 0;
}
现在我可以使用了:
{{ $entry->nr_visits }}
问题:
-
在一些示例中,我看到这样定义这种关系:
public function getNrVisitsAttribute() { if (!array_key_exists('visitsCount', $this->relations)) { $this->load('visitsCount'); } $related = $this->getRelation('visitsCount')->first(); return ($related) ? $related->count : 0; }问题是:这和我一开始展示的“简单方法”有什么区别?是更快/使用更少的资源还是...?
为什么这种方法在这种情况下不起作用?
$related是null所以访问器返回0而使用“简单方法”它返回正确的访问次数
我也尝试将visitsCount 方法关系从hasMany 更改为hasOne,但这并没有改变任何东西。
【问题讨论】:
标签: laravel laravel-4 orm eloquent relationship