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

时间:2016-08-18 06:01:22

标签: php laravel laravel-5 laravel-5.2 relationship

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

我试过的内容如下:

我的路线:

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参数,但没有给出所需的输出。

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

1 个答案:

答案 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,并且需要根据更改调整内部重定向。