在使用laravel做帖子回复的policy策略,只有回复的发表者或者帖子的发表者才显示删除按钮. 代码如下:
html页面部分
@foreach($replies as $reply)
<li class="media" name="reply{{$reply->id}}" id="reply{{ $reply->id }}">
<div class="media-left">
<a href="{{route('users.show',[$reply->user_id])}}">
<img class="img-thumbnail mr-3" src="{{$reply->user->avatar}}" alt="" style="height: 50px;">
</a>
</div>
<div class="media-body">
<h5 class="mt-0"><a href="{{route('users.show',[$reply->user_id])}}">{{$reply->user->name}} </a>· {{$reply->created_at->diffForHumans()}}</h5>
{{$reply->content}}
</div>
@can('destroy',$reply)
<div>
<form method="post" action="{{route('replies.destroy',$reply->id)}}">
@csrf
{{method_field('DELETE')}}
<button type="submit" class="btn btn-outline-secondary btn-sm">删除</button>
</form>
</div>
@endcan
</li>
<hr>
@endforeach
策略的定义ReplyPolicy.php
class ReplyPolicy extends Policy
{
public function destroy(User $user, Reply $reply)
{
//第22行 第22行
if($user->id===$reply->user_id ||$user->id===$reply->topic->user_id){
return true;
}
}
现在的问题,从laravel debug工具的sql语句执行了好多次重复的sql
针对这个问题,我该如何做优化了
因为你这个是放foreach里面 的循环n次就查询c次,我觉得你这个记录 可以连表查询吧 如果不连表查询,自己做个方法根据id查询,但上缓存 就好了