2017-05-07 9 views
0

はそれでは、私たちは私たちのテーブル(ポストやタグ)Laravel:

ポストがそうを持っている(多くの1)の関係を持っているに基づいて2つのモデルを持っていると仮定しましょう多くの一つのモデルには多くの関係に多くの一つ1つのタグだけを受け入れる、いわゆるハイライトされたタグフィールド。

投稿には、その投稿にタグが割り当てられている(多対多の)関係もありますので、通常のタグと同じです。

私が理解する限り、同じテーブルに複数の関係を割り当てることはできません。どのようにLaravelを使ってこれを行うことができますか?ベストプラクティスは何ですか?

答えて

0
You can do following : 

<?php 

namespace App; 

use Illuminate\Database\Eloquent\Model; 

class Post extends Model 
{ 

    public function tags(){ 

     return $this->hasMany('App\Tag'); 
    } 

    public function highlightedtag(){ 

     return $this->tags->where('tag_type', 'highlighted')->first(); 
    } 

} 

?> 

<?php 

namespace App; 

use Illuminate\Database\Eloquent\Model; 

class Tag extends Model 
{ 

    public function posts(){ 

     return $this->hasMany('App\Post'); 
    } 

} 

?> 
+0

あなたが多対多の関係を持つ必要があるタグを持つためには、1対多が全く機能せず、その答えでは、同じハイライトされたタグを持つ他の投稿を考慮していません。 – Mike

0

あなたが正しく理解していれば、投稿にメイン(強調表示されたタグ)タグと複数の通常のタグが必要です。これはかなり簡単です。

あなたのPostモデルの機能:

public function tag() 
{ 
    //Your highlighted tag 
    return $this->belongsTo(Tag::class); 
} 

public function tags() 
{ 
    //All normal tags 
    return $this->hasMany(Tag::class); 
} 

そして、これらは、あなたのテーブルの列です:

postsテーブル:

id: int 
title: string 
content: string 
tag_id: int 

tagsテーブル:

id: int 
name: string 
post_id: int 
+0

残念ながら、これはうまくいきません。最初にタグを持つためには、多対多の関係が必要です。 1対1は動作しません。 また、答えでは短い1データベースフィールドです、どこにハイライトされたタグIDを置くのですか? – Mike