导航到其他用户的个人资料 (laravel 5.2)

navigating to other user's profile (laravel 5.2)

我希望登录用户可以转到显示他所有帖子和其他内容的其他用户的个人资料页面。

我试过的如下:

我的路线:

Route::get('/myplace/{username}' , [

        'uses' => 'PostController@getmyplace' ,

        'as' => 'myplace' ,

        'middleware' => 'auth:web'

]);

后控制器:

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>

我传递了用户名参数,但没有给出所需的输出。

任何我需要提供的都告诉我。

你的问题就在这里

$query->where('user_id',Auth::user()->id)
        ->orWhereIn('user_id',Auth::user()->friends()->lists('id')
            );

您的查询是 selecting 数据 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)

如果您正确设置了 eloquent 关系,也可以删除查询。

$posts = $user->posts; // example

编辑 2 删除

@if(Auth::user()== $post->user)

您 selecting post(在您的控制器中)不属于您。所以不要在视图中检查它们是否属于您。

编辑 3

详情请看讨论。当前状态是 posts table 中实际上需要另一个对用户的引用。此参考定义了 "profile" 上的 post。因此它可以被称为 target_id 并在用户 table.

上引用 id

下一步必须更改路由以便传递用户 ID(当然也可以在请求正文中传递)例如

/user/{id}/profile

控制器然后将传递的 $id 参数作为 target_id 并将当前用户 (Auth::user()) 作为 user_id(post 的创建者)

最后,查询实际上可以适应 select 用户本人的每个 post + 每个 post 他是目标

$posts=Post::where(function($query) use ($user) {
     $query->where('user_id',$user->id)
        ->orWhere('target_id',$user->id);
})
->orderBy('created_at','desc')->get();

当然 $user 需要 select 在不同的请求和路由中编辑,内部重定向需要根据变化进行调整。