質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

Model

MVCモデルの一部であるModelはアプリケーションで扱うデータとその動作を管理するために扱います。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Q&A

解決済

1回答

4015閲覧

laravelフォロー機能時に出るエラー Undefined variable: user

退会済みユーザー

退会済みユーザー

総合スコア0

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

Model

MVCモデルの一部であるModelはアプリケーションで扱うデータとその動作を管理するために扱います。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

0グッド

0クリップ

投稿2020/10/01 13:44

laravel初心者です。現在、色々なページを参考にしてlaravelでフォロー機能を実装しています。
ページ表示時に表題のエラーが出て解決できません。未定義の変数だということは分かっています。

・聞きたいこと
$userはcontrollerのどこで定義しているのか。

・試したこと
$userにデータが渡っていないと思い、Controllerに$user = User::find($id); を追加しましたが、エラーは解決されませんでした。

下記よりコードです。

search

1@if(Auth::user()->isFollowing($user->id)) 2 <form method="POST" action="{{ route('unfollow', ['user' => $user->id]) }}"> 3 @csrf 4 <button type="submit" class="btn btn-outline-info btn-sm" style="width: 100%;">フォロー解除</button> 5 </form> 6 @else 7 <form method="POST" action="{{ route('follow', ['user' => $user->id]) }}"> 8 @csrf 9 <button type="submit" class="btn btn-outline-info btn-sm" style="width: 100%;">フォローする</button> 10 </form> 11@endif

UsersController

1// フォロー 2 public function follow(User $user) 3 { 4 $follower = Auth::user(); 5 // フォローしているか 6 $is_following = $follower->isFollowing($user->id); 7 if(!$is_following) { 8 // フォローしていなければフォローする 9 $follower->follow($user->id); 10 return back(); 11 } 12 } 13 14// フォロー解除 15 public function unfollow(User $user) 16 { 17 $follower = Auth::user(); 18 // フォローしているか 19 $is_following = $follower->isFollowing($user->id); 20 if($is_following) { 21 // フォローしていればフォローを解除する 22 $follower->unfollow($user->id); 23 return back(); 24 } 25 }

User

1public function followings() 2 { 3 return $this->belongsToMany(self::class, 'follows', 'follow_id', 'follower_id')->withTimestamps(); 4 } 5 6 // あるユーザのフォロワーとなっているユーザ を取得する 7 public function followers() 8 { 9 return $this->belongsToMany(self::class, 'follows', 'follower_id', 'follow_id')->withTimestamps(); 10 } 11 12 // フォローする 13 public function follow(Int $user_id) 14 { 15 return $this->follows()->attach($user_id); 16 } 17 18 // フォロー解除する 19 public function unfollow(Int $user_id) 20 { 21 return $this->follows()->detach($user_id); 22 } 23 24 // フォローしているか 25 public function isFollowing(Int $user_id) 26 { 27 return (boolean) $this->follows()->where('follower_id', $user_id); 28 } 29 30 // フォローされているか 31 public function isFollowed(Int $user_id) 32 { 33 return (boolean) $this->followers()->where('follow_id', $user_id); 34 }

web

1Route::post('users/{user}/follow', 'UsersController@follow')->name('follow'); 2Route::post('users/{user}/follow', 'UsersController@unfollow')->name('unfollow');

table

1public function up() 2 { 3 Schema::create('follows', function (Blueprint $table) 4 { 5 $table->increments('id')->autoIncrement(); 6 $table->integer('follow_id')->unsigned(); //フォローされている人 ed 7 $table->integer('follower_id')->unsigned(); //フォローしている人 ing 8 $table->timestamp('created_at')->useCurrent(); 9 // 外部キー制約 10 $table->foreign('follow_id')->references('id')->on('users')->onDelete('cascade'); 11 $table->foreign('follower_id')->references('id')->on('users')->onDelete('cascade'); 12 // 組み合わせのダブりを禁止 13 $table->unique(['follow_id', 'follower_id']); 14 }); 15 }

当方、独学で勉強していてかなりの初心者でです。雑な質問で申し訳ございませんが、分かる範囲んでいいので優しく教えていただけると助かります。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2020/10/01 13:49

コントローラからVIEWにデータを渡すくらいならドキュメントで事足りませんか? 何を参考にしたのでしょう。(あとそもそもPHPちゃんとできるんでしょうか)
退会済みユーザー

退会済みユーザー

2020/10/03 12:49

回答ありがとうございます! 無事フォロー機能実装することができました! 的確なアドバイスとても参考になりました!!
m.ts10806

2020/10/03 12:53

私のコメントコピペしただけの回答で自己解決とするのは間違っています。 指摘内容理解されてないのでしょうか・・。 「Web職人のためのフレームワーク」といううたい文句があるLaravelを使い始める段階にないという指摘です。 PHP初心者には絶対に無理です(そういう人がteratailにいすぎて、ずっと成長してません)
guest

回答1

0

ベストアンサー

コントローラからVIEWにデータを渡すくらいならドキュメントで事足りませんか?
何を参考にしたのでしょう。(あとそもそもPHPちゃんとできるんでしょうか)

投稿2020/10/03 12:50

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問