Laravel投稿サイト構築.47 こまごま作業(テーブル結合など)
前回、やっとカテゴリ一覧を表示できた。
今回はこまごまとしたところを。
■ログイン中のユーザ名表示
{{ auth()->user()['name'] }} で表示可能だった。
■投稿時に名前入力を省略
ログインを前提とするので、投稿者の名前入力は省略したい。
テーブルの名前欄を削除してid欄を追加する。
$php artisan make:migration thread_drop_name_add_id --table=threads
public function up()
{
Schema::table('threads', function (Blueprint $table) {
$table->dropColumn('user_name');
$table->bigInteger('user_id');
});
}
public function down()
{
Schema::table('threads', function (Blueprint $table) {
$table->string('user_name');
$table->dropColumn('user_id');
});
}
$php artisan migrate
■投稿一覧の名前をユーザマスタから取得
投稿テーブルのユーザIDからユーザマスタを結合したい。
Controller
$threads = Thread::orderBy('created_at', 'desc')->paginate(3);
と記述していたのを、
$threads = Thread::select([
't.category',
't.created_at',
't.message',
't.message_title',
't.user_id',
't.user_identifier',
'u.name as user_name',
])->from('threads as t')
->join('users as u', function($join) {
$join->on('t.user_id', '=', 'u.id');
})
->orderBy('t.created_at', 'desc')->paginate(5);
とした。
順調順調。
■書き込み欄の投稿ユーザ名削除
bladeから項目を削除して、
Controllerの投稿情報登録処理を修正する。
$threads = new Thread;
$form = $request->all();
☆
$threads->fill($form)->save();
ログインユーザIDを登録項目に設定したいので、☆の場所に
$form['user_id'] = auth()->id(); を挿入する。
blade側でid埋め込めばいいか?と考えたが、なりすましができてしまう可能性があったのでやめておいた。
投稿ボタンを押すと、
投稿できて、ユーザ名もidから引っ張ってこれてる。
返信にも反映させたいが、時間切れ。
続く