2014-12-10 14 views
5

Problem: Ich möchte Kunden nur erhalten, wenn sie bereits eine Bestellung für das laufende Jahr aufgegeben haben. Kunden und Bestellungen sind in zwei separaten Datenbanken (dies kann nicht geändert werden). Die Beziehungen sind alle eingerichtet und funktionieren korrekt, aber wenn ich Folgendes versuche, bekomme ich immer einen SQL-Fehler, während es versucht, "Bestellungen" in der "Kunden" -Datenbank zu suchen. Gibt es trotzdem einen Grund, Laravel zu zwingen, in diesem Szenario die richtige Datenbank zu verwenden?Laravel whereHas über zwei separate Datenbanken

$customers = $customers->whereHas('orders', function($query){ 
    $query->where('academic_year_id', '=', $this->current_academic_year->id); 
}); 

$customers = $customers->orderBy('DFKEY','ASC')->get(); 

Bestellen Modell:

public function customer() 
{ 
    return $this->belongsTo('Customer','dfkey'); 
} 

Kunden Modell:

protected $connection = 'mysql2'; 

public function orders() 
{ 
    return $this->hasMany('Order','dfkey','DFKEY'); 
} 

Vielen Dank im Voraus!

+0

klingt wie ein Problem mit den Beziehungen gibt es Gibt es eine "goesToMany" -Beziehung zu Kunden? Sie benötigen eine Auftragsfunktion im Kundenmodell, außerdem denke ich, dass Sie am Ende eine get-Anweisung benötigen, um die Ergebnisse tatsächlich zurückzugeben –

+0

Danke für die Antwort, ich habe meine ursprüngliche Frage mit mehr Details aktualisiert ... – Pedro

+0

http: // fideloper .com/Laravel-multiple-Datenbank-Verbindungen – Sachin

Antwort

0

Versuchen Abfrage wie folgt zu schreiben und Ihre Datenbank und Tablename setzen, wie es ist->

$customers = Schema::connection('your_database_name')::table('respective_table_name') 
->where('academic_year_id', '=', $this->current_academic_year->id) 
->orderBy('DFKEY','ASC') 
->get(); 
+0

und lassen Sie mich bitte wissen, was ist die Tabelle Struktur der Bestellung und Kunden-Tabelle, ich messe, wie Sie Daten speichern. damit ich mehr darüber klären kann.Zuerst, was Sie von welcher Tabelle bekommen müssen und dann ändern Sie die Datenbank und führen Sie eine zweite Abfrage für cursotmer Informationen wie Name, E-Mail, Telefonnummer. – Sachin

0

diese Gelöst einen Filter unter Verwendung von:

public function index() 
{ 
    $customers = new Customer; 
    // Make sure customers are current parents of students 
    $customers = $customers->whereHas('students', function($q) { 
     $q->where('STATUS', '=', 'FULL'); 
    }); 

    //Filter results 
    if(Input::get('academic_year') == 'ordered'){ 
     $customers = $customers->orderBy('DFKEY','ASC')->get(); 
     $filtered = $customers->filter(function($customer) 
     { 
      if ($customer->orders()->where('academic_year_id','=',$this->current_academic_year->id)->first()) { 
       return true; 
      } 
     }); 
     $customers = $filtered; 
     return View::make('admin.customers.index',compact('customers')); 
    } 

    $customers = $customers->orderBy('DFKEY','ASC')->get(); 

    return View::make('admin.customers.index',compact('customers')); 
} 
Verwandte Themen