2017-02-25 7 views
0

私は、次のクエリビルダを使用します。LaravelでSQLクエリを書き直すには?

$res = Announcement::whereExists(function ($query) { 
       $query->select(DB::raw(1)) 
        ->from('announcement_category') 
        ->join('user_category', 'user_category.category_id', '=', 'announcement_category.category_id') 
        ->where('user_category.user_id', 1) 
        ->where('announcement_category.announcement_id', '=', 'announcements.id') 
        ->whereNull('deleted_at'); 
      })->get(); 

短い形式with使用してこの問合せをリライトする方法:

Announcement::with("announcement_category")... 

をこのクエリビルダーで最後にconditonとwhere delete_at NOT nullを追加し、それが動作する、ので違う。テーブル間

関係:

Announcement   Announcement_category   User_category 
_____________   ____________________________ _______________ 
id | name    announcement_id | category_id user_id | category_id 

1)Announcementことができる1つまたは複数のカテゴリ(Announcement has many Announcement_category)を有する

2)ユーザは、1つまたは複数のカテゴリ

3)User_categoryはによってAnnouncement_categoryと関連していることができる

category_id = category_id

+1

'Announcement'、' AnnouncementCategory'と 'User'の間に設定した関係を表示できますか? –

+0

はい、更新された質問を見てください – Darama

+0

誰が私を助けることができますか? – Darama

答えて

0

あなたは関係を定義する必要がありますあなたが行くように発表し、その後

public function announcement_category() { 
return $this->hasMany(AnnouncementCategory::class, 'announcement_id') 
} 

AnnouncementCategory最初

途中、関係に条件を追加したり、関係の機能でそれを設定します。

+0

これはどのように使用しますか?完全な例を共有できますか? – Darama

+0

このように? 'Announcement :: with(" announcement_category ") - > where(" user_id "、1)' – Darama

+0

私の編集した質問を見てください – Darama

関連する問題