0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

PHP Laravel 6 おすすめ映画投稿サイト作成過程 9:リレーション編

Posted at

#リレーションの定義

##リレーション3パターン

###1対1
一つのモデルが一つのモデルと関係を持つタイプです。

###1対多
一つのモデルが多くのモデルを持つタイプです。

###多対多
三つ以上のモデルが存在し、それぞれが関係を持つタイプです。

##多対多で、タグをボタン選択式にして実装
今回のタグ付けには、多対多を使用します。
まず、recommendsテーブルとtagsテーブルを関連付けるためのrecommend_tagテーブルを作成します。

$ php artisan make:migration create_recommend_tag_table

次に、作成した create_recommend_tag_table を以下の内容に編集します。

recommend/database/migrations/2020_09_26_103413_create_recommend_tag_table.php
public function up()
    {
        Schema::create('recommend_tag', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->unsignedBigInteger('recomend_id');
            $table->unsignedBigInteger('tag_id');
        });
    }
recommend/app/Models/Recommend.php
class Recommend extends Model
{
    protected $fillable = [
      'title',
      'image_file_name',
      'image_title',
      'url',
      'description',
      'Impressions'
    ];

    //リレーション
    public function tags()
    {
    return $this->belongsToMany(tag::class);
    }
}
recommend/app/Models/Tag.php
class Recommend extends Model
{
class Tag extends Model
{
    protected $fillable = [
      'title',
    ];

    //リレーション
    public function recommend()
    {
    return $this->belongsToMany(Recommend::class);
    }
}

recommendと連帯した表示をさせるため、コントローラにtagモデルを設定します。

recommend/app/Http/Controllers/RecommendController.php
use App\Models\Recommend;
use App\Models\Tag;
// use Illuminate\Http\Request;
use App\Http\Requests\RecommendPostRequest;

recommendコントローラーにtagを渡します。

recommend/app/Http/Controllers/RecommendController.php
public function create()
    {
        $tags = Tag::all();
        return view('recommends.create', compact('tags'));
    }


public function edit(Recommend $recommend)
    {
      $tags = Tag::all();
      return view('recommends.edit', compact('recommend', 'tags'));
    }

recommendのeditとcreateにtagをforeachで組み込み

recommend/resources/views/recommends/create.blade.php
@foreach($tags as $tag)
  <th>
  <input type="checkbox" name="tag">{{$tag->title}}
  </th>
  @endforeach
0
0
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
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?