2017-02-25 3 views
0

私はPostsテーブルを持っています。3番目のテーブルLaravelで選択する方法?

Postカテゴリがあります。

Post_categories 
_________________ 
id post_id | category_id 

もテーブルがあります:

User_categories 
__________________ 
category_id | user_id 

だから、私はUser_categories.user_id =9User_categories.category_id = Post_categoriesPostテーブルからすべての行を選択する必要があります。

他の言葉で言えば、ユーザーが購読したカテゴリに関する記事を表示する必要があります。

答えて

1

これを与える別のものは、控えめなやり方で試してください。

ポストモデルクラスでは、カテゴリモデルと多対多関係を定義します。 Userモデルクラスの

class Post { 
public function categories() 
{ 
return $this->belongsToMany('App\Category', 'Post_categories', 'post_id', 'category_id'); 
} 
} 

(ピボットテーブルは、Post_categoriesある)、分類モデルと多対多の関係を定義します。 (ピボットテーブルはUser_categoriesです)また、このクラスでは、posts()関数を関係の存在に関するクエリとして定義します。ユーザーはこのことができます

App\User::find(9)->posts; 

希望に加入していることを

class User { 
public function categories() 
{ 
return $this->belongsToMany('App\Category', 'User_categories', 'user_id', 'category_id'); 
} 

public function posts() 
{ 
return App\Post::whereHas('categories', function ($query) use($this) { 
$query->whereIn('posts.cat_id', array_column($this->categories->toArray(), 'categories.id')); 
}); 
} 

} 

は、投稿を取得します。

+0

あなたがチャットに行くことができます:

その後、あなたのような何かを行うことができるはず? – Darama

+1

バズ私はあなたの周りの周りr。 –

+0

私はここにいます – Darama

0

私はここにドキュメントを読んで始まるお勧め: https://laravel.com/docs/5.4/eloquent

、ここで: https://laravel.com/docs/5.4/eloquent-relationships

特にこの部分: https://laravel.com/docs/5.4/eloquent-relationships#many-to-many

まずあなたがPostのためのモデルを定義したいと思うでしょう、Category 、およびUser

その後、必要に応じて適切な関係が定義されていることを確認してください。しかし、あなたの質問から分かるように、多対多の関係が必要です。 このような関係のために、ピボットテーブルも作成する必要があります。

public function up() 
{ 
    Schema::create('category_post', function (Blueprint $table) { 
     $table->integer('category_id')->unsigned()->index(); 
     $table->foreign('category_id')->references('id')->on('categories')->onDelete('cascade'); 
     $table->integer('post_id')->unsigned()->index(); 
     $table->foreign('post_id')->references('id')->on('posts')->onDelete('cascade'); 
     $table->primary(['skill_id', 'user_id']); 
     $table->timestamps(); 
    }); 
} 
:慣例として、あなたは彼らに category_postcategory_user(アルファベット順でピボットテーブルからの二つのモデルの小文字の名前、)

category_postのために例えばのようなものを、見なければならないあなたのピボットテーブルの移行に名前を付けます

テーブルを設定したら、リレーションシップが正しく定義されていることを確認する必要があります。

User::find(9)->posts;

+0

残念ながら、私の問題は正しくありません。このSQLを見てください:http://sqlfiddle.com/#!9/ec162/3/0 – Darama

+1

まあ、答えはまだ立っています'Post'の代わりに' Announcement'に適応させるだけです –

+0

私たちはチャットに行くことができますか? – Darama

関連する問題