Laravel 用户是否喜欢 post 效率
Laravel did user liked the post efficency
我创建了以下简单机制来检查登录用户是否喜欢 post 不。
我想知道它是否有效,是否有办法让它变得更好
Post 型号:
public function likes()
{
return $this->hasMany('Like');
}
public function likedByUser()
{
if (Auth::user())
return $this->likes()->where('user_id', Auth::user()->id);
else
return array();
}
Post 控制器:
$posts = Post::with('likedByUser')
->selectRaw('*, (score / (NOW() - posts.created_at)) as `ordering_value`')
->orderBy('ordering_value', 'DESC')
->orderBy('created_at', 'DESC')->paginate(12);
return $posts;
posts.blade:
@if(isset($post->likedByUser[0]))
style="background-position: right;" data-value="liked"
@endif
我觉得不错。而且我认为没有任何方法可以获得更好的性能并保持 Eloquent 关系和预加载的简单性。
但是,要稍微改进一下语法...
我会添加一个属性访问器,这样您的 @if
会更漂亮一些:
public function getLikedAttribute(){
return ! $this->likedByUser->isEmpty();
}
然后在您看来:
@if($post->liked)
style="background-position: right;" data-value="liked"
@endif
我创建了以下简单机制来检查登录用户是否喜欢 post 不。
我想知道它是否有效,是否有办法让它变得更好
Post 型号:
public function likes()
{
return $this->hasMany('Like');
}
public function likedByUser()
{
if (Auth::user())
return $this->likes()->where('user_id', Auth::user()->id);
else
return array();
}
Post 控制器:
$posts = Post::with('likedByUser')
->selectRaw('*, (score / (NOW() - posts.created_at)) as `ordering_value`')
->orderBy('ordering_value', 'DESC')
->orderBy('created_at', 'DESC')->paginate(12);
return $posts;
posts.blade:
@if(isset($post->likedByUser[0]))
style="background-position: right;" data-value="liked"
@endif
我觉得不错。而且我认为没有任何方法可以获得更好的性能并保持 Eloquent 关系和预加载的简单性。
但是,要稍微改进一下语法...
我会添加一个属性访问器,这样您的 @if
会更漂亮一些:
public function getLikedAttribute(){
return ! $this->likedByUser->isEmpty();
}
然后在您看来:
@if($post->liked)
style="background-position: right;" data-value="liked"
@endif