2009-03-02 13 views
1

Mögliche Duplizieren:
How do I query a table based with HABTM relationship while providing additional conditions in CakePHP?Wie finde ich folgende Daten

I, m mit zwei Tabellen (Regionen und Safaris) mit viele zu viele Beziehung. Die Tabellen werden durch eine andere Tabelle namens regions_safaris (mit den Feldern - region_id $ safari-id) verbunden. Ich möchte alle Safaris abholen, die bestimmte Kriterien erfüllen, wie die Dauer von 5 Tagen und in einer bestimmten Region. Dies sollte in CakePHP implementiert werden

Antwort

1

Dies scheint eher ein Datenbankproblem als ein PHP-Problem. Hier ist die Syntax (für die meisten DBs wie zum Beispiel MySQL) eine Liste aller 5-Tages-Safaris zu erhalten, die zu Region kartiert sind ‚yourRegion‘

table safari: 
id 
name 
duration 

table region: 
id 
name 

table regions_safaris: 
safari_id 
region_id 

select s.name 
from region r, safaris_regions sr, region r, safari s 
where r.name='yourRegion' 
and sr.region_id=r.id and s.id=sr.safari_id and s.duration=5; 
+0

danke. das funktioniert gut, aber wie kann ich das gleiche konzept in cakephp implementieren – juma

1

Angenommen, Sie haben Ihre Modelle korrekt zugeordnet sind. Dies sind die Codezeilen, die ich in einer ähnlichen Situation verwenden würde. Bei der Filterung auf einen normalen Zustand habe ich festgestellt, dass es hilfreich ist, mit dem Modell zu beginnen, das den restriktivsten Filter aufweist (oder den, der die Datenbank am schnellsten abbildet). In diesem Fall die Region.

Vom Safaris Controller:

$conditions = array('conditions' => array('Region.id' => 'yourRegion', 'Safari.duration' => 5); 
$this->Safari->Region->recursive = 1; 
$safaris = $this->Safari->Region->find('all', $conditions); 

Sie sollten dann in der Lage sein zu print_r ($ Safaris) und Zugriff auf jede Safari über eine verschachtelte Region Array. d.h .:

$safaris['Region'][0]['Safari'][0]['name'] 

Dies sollte Ihnen die ersten zurück Regionen erste Safari zugeordnet, die den Kriterien entspricht. print_r ($ safaris), um einen besseren Einblick in die Datenstruktur zu bekommen und Sie werden sehen, was ich meine.