2016-11-29 4 views
0

Ich habe 2 Tabellen mit dieser Strukturen:Wählen Sie Datensätze, bei denen nicht in relationalen Tabelle

**table1** 
id | title 
-----+-------- 
1 | Blah1 
2 | Blah2 

**table2** 
id | table1_id | article_id 
-----+-------------+------------ 
1 | 1   | 1 
2 | 1   | 3 
3 | 2   | 1 

Jetzt möchte ich wissen, wie kann ich alle Datensätze aus table1 wählen, wo in nicht table2

zum Beispiel verwende ich brauchen alle table1 Datensätze, wo nicht existiert in table2 für article_id=3

Wie kann ich Modell erstellen und eloquent Modelle verwenden?

UPDATE:

Ich brauche Blah2 von table1 und dann zu meinem Benutzer zeigen, weil Blah1 vor für article_id = 3 eingefügt.

UPDATE 2:

Diese Abfrage gearbeitet wird, muss ich schreiben Modell für diese Abfrage:

SELECT a.* 
FROM table1 AS a 
WHERE a.id NOT IN (SELECT table1_id 
FROM table2 
WHERE article_id = 3 
) 
+0

Können Sie genauer erklären, was Sie suchen? Wenn Sie Ihre Frage nicht mindestens aktualisieren können und ein Schema für Ihre erwartete Ausgabe entwerfen, wie Sie bereits für Tabelle1 und Tabelle2 angegeben haben. –

+0

@MahfuzulAlam Ich aktualisierte meine Frage – MajAfy

+0

@MajAfy: Möchten Sie Datensätze aus Tabelle 1 abrufen, deren ID nicht in Tabelle 2 als article_id-Feld verfügbar ist. Bedeutet, dass Sie wollen id | titel ----------------- 2 | Blah2 Weil 2 nicht als article_id in Tabelle 2 verfügbar ist, richtig? –

Antwort

1

Sie benötigen wie Modell etwas zu schaffen, unter Ihnen Namen entsprechend hier werde ich ändern kann Verweisen Sie etwas wie unten table1 => ParentModel und table2 => ChildModel

Definieren Sie die Beziehung für Kinder in ParentModel mit unten Methode

class ParentModel extends Model { 
    public function children() { 
     return $this->hasMany(ChildModel::class, 'table1_id'); 
    } 
} 

whereDoesntHave Methode ist verfügbar Datensätze zu filtern mit ähnlichen Modell Check hier https://laravel.com/docs/5.3/eloquent-relationships#querying-relationship-absence

ParentModel::whereDoesntHave('children', function($q){ 
    // here $q refers to related model in this case ChildModel 
    $q->where('article_id', 3); 
})->get(); 

obige Abfrage sollte die gewünschten Ergebnisse zurück.

+0

Dank Arbeit wie ein Charme :) – MajAfy

+0

Sie sind willkommen .. :) –

Verwandte Themen