2016-08-18 26 views
0

ログインユーザーは、自分の投稿や他のものが表示されている他のユーザーのプロフィールページに移動できます。他のユーザーのプロフィールに移動する(laravel 5.2)

は、私が試したことは以下の通りである:

私のルート:

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

     'uses' => '[email protected]' , 

     '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

どのようなエラーが発生しますか?あなたが手に入れたいものと手に入れたものは何ですか? –

+0

@AmirBar私は誰かのプロフィールに行くと、そのユーザーのコンテンツ(ここでは投稿)が表示されます。私は何を得ているのですか?>ログインしたユーザの内容は次のとおりです –

答えて

1

あなたの問題は、ここでは代わりに$ユーザー

$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(); 

EDIT追加使用($ユーザー)

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

あなたのクエリが認証用のデータを選択している::ユーザー()です匿名関数を宣言してください

また、イオンを正確に検出する。あなたは(あなたのコントローラで)ポストを選択している

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

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

EDIT 2取り除くことDONTあなたにbelongt。だから、彼らがあなたの所属であることを確認しないでください。詳細について

EDIT 3

議論に顔をしています。現在の状態は、実際には、ユーザへの別の参照が投稿テーブルに必要であるということです。このリファレンスは、投稿者が作成した投稿を「プロフィール」として定義します。したがって、それはtarget_idと呼ばれ、ユーザテーブルのidを参照することができます。

次のステップでは、ユーザーIDが渡されるようにルートを変更する必要があります(コースのリクエスト本体に渡すこともできます)。

/user/{id}/profile 

コントローラは、その後TARGET_IDと、現在のユーザーとして渡されたの$ idパラメータを取ります(認証::ユーザー())USER_ID(ポストの作成者が)

最後にクエリが実際に適応させることができるようユーザ自身+ $のユーザーが異なるrequetsとルーティングで選択する必要があり、内部リダイレクトが変化に関して適応する必要がofcourseの彼は、ターゲット

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

ある全ての投稿のすべてのポストを選択します。

+0

エラーが発生しました:未定義変数:ユーザ –

+0

ああ、これは匿名関数だから関数に "use($ user)"を追加するだけです。 2番目の|今すぐ追加されました –

+0

sryしかし、これは私の問題を解決しませんでした..... –

関連する問題