我希望登录用户可以转到其他用户的个人资料页面,其中显示所有帖子和其他内容。
我试过的内容如下:
我的路线:
Route::get('/myplace/{username}' , [
'uses' => 'PostController@getmyplace' ,
'as' => 'myplace' ,
'middleware' => 'auth:web'
]);
PostController中:
public function getmyplace($username)
{
$user = User::where('username', $username)->first();
if(!$user)
abort(404);
$posts=Post::where(function($query){
$query->where('user_id',Auth::user()->id)
->orWhereIn('user_id',Auth::user()->friends()->lists('id')
);
})
->orderBy('created_at','desc')->get();
$accounts=Account::orderBy('updated_at','desc')->limit(1)->get();
return view('myplace',['user'=>$user,'posts'=>$posts,'accounts'=>$accounts]);
}
我的观点:
> @if (!$posts->count())
> <p>{{$user->getNameOrUsername() }} hasn't posted anything, yet.</p>
> @else
> @foreach ($posts as $post)
> @if(Auth::user()== $post->user)
>
> <div class="panel panel-default">
> <div class="panel-heading">
> <div class="row">
> <section class="col-md-2 col-xs-2"> <img id="imagesize2" src="images/g.jpg" class="img-circle" data-action="zoom"/></img>
> </section> <section class="col-md-5 col-xs-offset-1 col-xs-5">
> <a id="alink13" href=""><h5
> id="alink14">{{$post->user->getNameOrUsername() }}</h5></a>
> <p> on {{$post->created_at}} </p> </section>
> </div>
> <div class="panel-content">
> <div class="row" id="fetch">
> <section class="col-md-12" data-postid="{{ $post->id }}">
> <p id="post">{{$post->body}}</p>
> <div class="interaction" >
> @if(Auth::user()==$post->user)
> <a href="" class="edit">Edit</a>
> <a id="remove2" href="{{route('post.delete',['post_id' => $post->id])}}">Delete</a>
> @endif
> </div>
> </section>
> </div>
> </div>
我传递了username参数,但没有给出所需的输出。
我需要提供的任何东西都告诉我。
答案 0 :(得分:1)
你的问题在这里
$query->where('user_id',Auth::user()->id)
->orWhereIn('user_id',Auth::user()->friends()->lists('id')
);
您的查询是为Auth :: user()而不是$ user
选择数据$posts=Post::where(function($query) use ($user) {
$query->where('user_id',$user->id)
->orWhereIn('user_id',$user->friends()->lists('id')
);
})
->orderBy('created_at','desc')->get();
编辑在声明匿名函数时添加使用($ user)
如果您正确设置了雄辩关系,也可以删除查询。
$posts = $user->posts; // example
编辑2 删除
@if(Auth::user()== $post->user)
您正在选择不属于您的帖子(在您的控制器中)。因此,请勿在视图中检查它们是否属于您。
编辑3
有关详细信息,请参阅讨论。当前状态实际上是在posts表中需要对用户的另一个引用。该参考文献定义了发布帖子的“配置文件”。因此,它可以被称为 target_id ,并在用户表上引用id。
在下一步中,必须更改路由,以便传递用户ID(也可以在请求正文中传递),例如
/user/{id}/profile
然后控制器将传递的$ id参数作为target_id,将当前用户(Auth :: user())作为user_id(帖子的创建者)
最后,可以调整查询以实际选择用户自己的每个帖子+他作为目标的每个帖子
$posts=Post::where(function($query) use ($user) {
$query->where('user_id',$user->id)
->orWhere('target_id',$user->id);
})
->orderBy('created_at','desc')->get();
当然,需要在不同的requets中选择$ user,并且需要根据更改调整内部重定向。