Ich habe drei Datenbanktabellen, Hubs, Zimmer & Geräte wie folgt.Finden Sie eloquente Modelle mit wo und Beziehungen
Datenbank Tabellen und Spalten
- Naben: ID, Name
- Zimmer: id, hub_id, name
- Geräte: id, room_id, name
Wie Sie sich vorstellen können, Ich habe drei Modelle.
class Hub extends Model {
public $hasMany = ['rooms' => ['Models\Room']];
}
class Room extends Model {
public $hasMany = ['devices' => ['Models\Device']];
public $belongsTo = ['hub' => [
'Models\Hub',
'key' => 'hub_id'
]];
}
class Device extends Model {
public $belongsTo = ['room' => [
'Models\Room',
'key' => 'room_id'
]];
}
Und ich habe die folgenden Datensätze.
Hubs
- 1, HubOne
- 2, HubTwo
Zimmer und Geräte (zum Beispiel)
- Hub (1) Wohnzimmer (Wohnzimmer Licht, Lauflicht)
- Hub (1) Schlafzimmer (Schlafzimmer Licht, Tischlampe)
- Hub (1) Küche (Tischleuchte)
- Hub (2) Wohnzimmer (Wohnzimmer Licht, Gehweg Licht)
Ich mag würde zu Geräten von hub_id und einem bestimmten Begriff finden . Die hub_id sollte genau übereinstimmen. Der Begriff sollte "LIKE" lauten, entweder der Raumname oder der Gerätename.
Zum Beispiel: hub_id = 1, Begriff = "Wohnzimmer".
Die Ergebnisse sollten alle Geräte in Hub (1) Wohnzimmer sein.
Zum Beispiel: hub_id = 1, term = "Tischlampe"
Die Ergebnisse sollten die beiden Lampen im Schlafzimmer & Küche sein.
Aber wenn der hub_id = 1, term = "Wohnzimmer Licht"
Das Ergebnis das einzige Licht mit dem Namen übereinstimmen sollte.
Wie kann ich dies tun die Eloquent Modelle & Kollektionen Abfrage Stil statt roh Abfrage? Das folgende Skript von mir ist ziemlich nah, aber immer noch nicht korrekt.Bitte helfen Sie.
$rooms = Room::with('devices')
->where('hub_id', $hub_id)
->where(function ($query) use ($term) {
$query->whereHas('devices', function ($query) use ($term) {
$query->where('device_name', 'LIKE', '%' . $term . '%');
})->orWhere('title', 'LIKE', '%' . $term . '%');
})->get();
$devices = $rooms->lists('devices');