Ich habe drei Tabellen garages
, cars
, securities
.Hat einen durch Laravel Eloquent
Die Wertpapiere sind diejenigen, die ein Auto sicher halten, Sie können mehr als ein Wertpapier haben, aber ein einzelnes Wertpapier kann nur ein Auto sicher halten. Die Garage ist, wo das Auto ist und die Wertpapiere sind auch.
Ich möchte alle Wertpapiere auflisten und kenne den Namen der Werkstatt, die er ist. Das Problem ist, dass securities
hat keine Spalte mit der ID der Garage, nur die ID des Autos, das er sicher ist, aber Auto hat die ID der Garage.
Laravel Eloquent hat eine Methode namens hasManyThrough
, aber securities
hat nur eine garage
bis cars
. Hier
ist die Tabellen:
Garagen Tabelle:
-----------------------------------
|garage_id|garage_name|garage_size|
-----------------------------------
| 1| Garage 1| 200|
-----------------------------------
| 2| Garage 2| 400|
-----------------------------------
Autos Tabelle:
---------------------------
|car_id|car_name|garage_id|
---------------------------
| 1| Car 1| 1|
---------------------------
| 2| Car 2| 1|
---------------------------
| 3| Car 3| 2|
---------------------------
Wertpapiere Tabelle:
----------------------------------
|security_id|security_name|car_id|
----------------------------------
| 1| Security 1| 1|
----------------------------------
| 2| Security 2| 1|
----------------------------------
| 3| Security 3| 2|
----------------------------------
| 4| Security 4| 3|
----------------------------------
Der Ausgang muss sein:
Security 1 is on Garage 1
Security 2 is on Garage 1
Security 3 is on Garage 1
Security 4 is on Garage 2
Und ich habe die Modelle:
Der Code ist die Garagen zur Liste, aber ich mag ähnlich machen, aber die Wertpapiere zur Liste (nur für Sie eine Vorstellung davon haben, wie die Struktur ist) .
$garages = Garages::with(['cars', 'securities'])->get();
$garages->transform(function($garages) {
return array(
'garage_name' => $garage->garage_name,
'count_cars' => $garage->cars->count(),
'count_securities' => $garage->securities->count(),
);
});
class Garages extends Eloquent
{
public function cars()
{
return $this->hasMany('cars');
}
public function securities()
{
return $this->hasMany('securities');
}
}
class Cars extends Eloquent
{
}
class Securities extends Eloquent
{
}
Und wieder einen Schwerpunkt zu machen: Ich mag den Namen der Garage Zusammenhang mit dem Auto haben, die die Sicherheit sicher hält.
Nur um es noch einfacher zu verstehen, wenn ich dies tun:
$securities = Securities::with(['cars'])->get();
class Securities extends Eloquent
{
public function cars()
{
return $this->hasOne('cars');
}
}
Ich werde nur die garage_id
aus cars
Tabelle als Beziehungen erhalten. Was ich wirklich will, ist der Name der Garage.
[relations:protected] => Array
(
[cars] => Cars Object
(
...
[attributes:protected] => Array
(
...
[car_name] => Car 1
[garage_id] => 1
...
I verstehe nicht, wie ich jetzt den Namen der Garage abrufen werde. Denn wenn ich das mache: '$ securities = Securities :: with (['cars']) -> get();' gibt immernoch nur die ID des Benutzers zurück. – yayuj
Sie können Beziehung mit Punktoperator verschachteln, wie folgt: 'Sicherheit :: mit ('Auto', 'Car.Garage')' – Gufran
@MrAlmighty Ich habe die Antwort bearbeitet, um weitere Informationen hinzuzufügen. geh nochmal durch. – Gufran