Mam trzy tabele garages
, cars
, securities
.Ma jeden przez Laravel Wymowne
Papiery wartościowe zabezpieczają jeden samochód, można mieć więcej niż jedno zabezpieczenie, ale jedno zabezpieczenie może zabezpieczyć tylko jeden samochód. Garaż jest tam, gdzie jest samochód, a także papiery wartościowe.
Chcę tylko wymienić wszystkie papiery wartościowe i znać nazwę garażu, którym jest. Problem polega na tym, że securities
nie ma kolumny zawierającej identyfikator garażu, a jedynie identyfikator samochodu, który zapewnia, ale samochód ma identyfikator garażu.
Laravel Eoquent ma metodę o nazwie hasManyThrough
, ale securities
ma tylko jedną garage
do cars
.
Oto tabele:
garaże tabela:
-----------------------------------
|garage_id|garage_name|garage_size|
-----------------------------------
| 1| Garage 1| 200|
-----------------------------------
| 2| Garage 2| 400|
-----------------------------------
samochody tabela:
---------------------------
|car_id|car_name|garage_id|
---------------------------
| 1| Car 1| 1|
---------------------------
| 2| Car 2| 1|
---------------------------
| 3| Car 3| 2|
---------------------------
stół papiery wartościowe:
----------------------------------
|security_id|security_name|car_id|
----------------------------------
| 1| Security 1| 1|
----------------------------------
| 2| Security 2| 1|
----------------------------------
| 3| Security 3| 2|
----------------------------------
| 4| Security 4| 3|
----------------------------------
wyjście musi być:
Security 1 is on Garage 1
Security 2 is on Garage 1
Security 3 is on Garage 1
Security 4 is on Garage 2
i mam modele:
Kod jest notować garaże, ale chcę, aby podobne, ale do listy papierów wartościowych (tak, aby mieć pomysł, jak struktura jest) .
$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
{
}
I tak, aby nacisk znowu: chcę mieć nazwę związaną z garażu samochód, że bezpieczeństwo jest utrzymując bezpieczny.
Wystarczy, aby jeszcze łatwiej zrozumieć, jeśli mogę to zrobić:
$securities = Securities::with(['cars'])->get();
class Securities extends Eloquent
{
public function cars()
{
return $this->hasOne('cars');
}
}
dostanę tylko garage_id
od cars
stół jako relacji. To, czego naprawdę chcę, to nazwa garażu.
[relations:protected] => Array
(
[cars] => Cars Object
(
...
[attributes:protected] => Array
(
...
[car_name] => Car 1
[garage_id] => 1
...
I nie rozumiem, jak mam teraz odzyskać nazwę garażu. Ponieważ jeśli to zrobię: '$ securities = Securities :: with (['cars']) -> get();' nadal zwraca tylko identyfikator użytkownika. – yayuj
Można nawiązywać relacje za pomocą operatora dot, na przykład: 'Security :: with ('car', 'car.garage')' – Gufran
@MrAlmighty Edytowałem odpowiedź, aby dodać więcej informacji. powtórz to jeszcze raz. – Gufran