2017-02-25 24 views
0

Ich verwende die folgende Query Builder:Wie schreibe ich SQL-Abfrage in Laravel?

$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(); 

Wie diese Abfrage neu zu schreiben, kurze Form mit with:

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

Da in dieser Abfrage Bauer conditon und where delete_at NOT null am Ende addiert, und es funktioniert falsch.

Beziehungen zwischen Tabellen:

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

1) Announcement kann eine oder mehrere Kategorien (Announcement has many Announcement_category)

2) Der Benutzer kann eine oder mehrere Kategorien

3) User_category ist verwandt mit Announcement_category durch category_id = category_id

+1

Können Sie die Beziehungen anzeigen, die Sie zwischen "Ansage", "Ansagekategorie" und "Benutzer" eingerichtet haben? –

+0

Ja, schau aktualisiert Frage – Darama

+0

Wer kann mir helfen? – Darama

Antwort

0

Sie sollten die Beziehung zwischen beiden definieren en-Mitteilung und AnnouncementCategory ersten

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

Dann Zustand die Beziehung hinzufügen, wie Sie gehen oder es sogar in der Beziehung Funktion einrichten.

+0

Und wie benutzt du das (Anruf)? Kannst du das ganze Beispiel teilen? – Darama

+0

Gefällt mir? 'Ansage :: mit (" announce_category ") -> where (" user_id ", 1)' – Darama

+0

Schau bitte meine bearbeitete Frage – Darama