Laravel5.4でツイッターのようなアプリを作っています
Tweetにユーザー名を表示させたいので、TweetモデルとUserモデルをリレーションで関連付けています。
初めに書いたコードではUser_idがNullになってしまい、ユーザー名を表示できませんでした
そのため、TweetのコントローラーでTweetの保存ボタンを押したときの処理を書き足しました。Tweetの内容とUser_idをDBにインサートする文です
これを書いただけではuser_idという変数が未定義となってしまいました。
変数を定義したいのですが、私が考えた書き方では定義になっておらず依然「user_idという変数が未定義」というエラーが表示されます
下記のように書いてあるのですが、この場合どのように書けば変数を定義できますでしょうか?
【書き足したコード】
<?php namespace Patter\Http\Controllers; use DB; use Illuminate\Http\Request; use Patter\Tweet; class TweetsController extends Controller { public function index() { //ここでuser_idが定義できないかと思ったのですが、これではだめでした $user_id = DB::select('select user_id from tweets'); $tweets = DB::table('tweets')->join('users','tweets.user_id','=','users.id')->get(); return view('tweets.index', ['tweets' => $tweets]); } public function create() { return view('tweets.create'); } public function store(Request $request) { //ツイートボタンを押したときtweetの内容だけでなく、user_idも保存するようにしたいので追加しました DB::table('tweets')->insert([ 'body' => $request['body'], 'user_id' => $user_id, ]); return redirect('/'); } public function show($id) { //ここでuser_idが定義できないかと思ったのですが、これではだめでした $user_id = DB::select("select user_id from tweets where id = $id"); $tweet = Tweet::find($id); return view('tweets.show', compact('tweet')); } ・・・・・・
【初めに書いたコード】
ビュー
@foreach($tweets as $tweet) <p class="lead">{{ $tweet->created_at->toFormattedDateString() }}</p> <p class="lead">{{ $tweet->user->username }}</p> <a href="/tweets/{{ $tweet->id }}"> <p class="lead">{{ $tweet->body }}</p> </a> @endforeach
Tweetのマイグレーションファイル
public function up() { Schema::create('tweets', function (Blueprint $table) { $table->increments('id'); $table->text('body'); $table->integer('user_id')->nullable(); $table->timestamps(); }); }
Tweet Model
public function user() { return $this->belongsTo(User::class); }
User Model
public function tweets() { return $this->hasMany(Tweet::class); }
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/07/13 04:43
2017/07/13 05:04 編集