0
5

More than 3 years have passed since last update.

Laravelでお気に入り機能

Posted at

はじめに

サービスの概要としては、本のデータがあって、user機能があって、userは本にブックマーク(お気に入り機能)をつけることができるという感じです。

実装

Book.php
 public function bookMarks(){
        return $this->hasMany('App\BookMark');
    }
User.php
 public function bookmarks(){
        return $this->hasMany('App\BookMark');
   }
BookMark.php

  public function book(){
        return $this->belongsTo('App\Book');
    }

    public function user(){
        return $this->belongsTo('App\User');
    }

関連はこのような感じになってます!

@if (Auth::check())
    @if ($bookmark)
    <form action="{{action('BookMarksController@destroy',$book->id)}}" method="POST" class="mb-4" >
    <input type="hidden" name="book_id" value="{{$book->id}}">
    @csrf
    @method('DELETE')
        <button type="submit">
          ブックマーク解除
        </button>
    </form>
    @else
    <form action="{{action('BookMarksController@store')}}" method="POST" class="mb-4" >
    @csrf
    <input type="hidden" name="book_id" value="{{$book->id}}">
        <button type="submit">
         ブックマーク
        </button>
    </form>

    @endif
  @endif

これは本の詳細ページなのですが、ブックマークしてたら「ブックマーク解除」ボタンが表示され、していなかったら「ブックマーク」ボタンが表示されるようにif文をかけてます。

BookMarksController
<?php

namespace App\Http\Controllers;
use App\BookMark;
use App\Book;
use Illuminate\Support\Facades\Auth;
use Illuminate\Http\Request;

class BookMarksController extends Controller
{
    public function store(Request $request)
    {

        $bookmark = new BookMark;
        $bookmark->book_id = $request->book_id;
        $bookmark->user_id = Auth::user()->id;
        $bookmark->save();


        return redirect()->route('book.show',[$request->book_id]);
    }

    public function destroy(Request $request, $id) {
        $book=Book::findOrFail($id);

        $book->bookmarks()->delete();

        return redirect()->route('book.show',[$request->book_id]);
    }
}

次にコントローラーです。storeはシンプルにリクエストで渡ってきた値を代入しているだけですね。 destroyの方はまず本のデータを取ってきて、紐付いているブックマークを削除という形です。destroyの方はもっと良い書き方がありそうですが。。。

0
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
5