Jest to wygodne, że model laravel udostępnia metodę, dzięki której może zwracać wyniki z innej powiązanej tabeli.Dlaczego model laravel powiela zbiór danych i jak (jeśli to możliwe) mieć tylko jeden zestaw danych?
Na przykład mam tabelę o nazwie item i inną tabelę o nazwie feedback, w której tabela opinii przechowuje informacje zwrotne o produkcie w tabeli pozycji. Tak więc, aby uzyskać wszystkie informacje zwrotne dotyczące elementu o identyfikatorze 1, zrobię:
Item::find(1)->feedback;
I dalej to wydruk zwracanego obiektu.
Illuminate\Database\Eloquent\Collection Object
( [items:protected] => Array
(
[0] => Feedback Object
(
[table:protected] => feedback
[connection:protected] =>
[primaryKey:protected] => id
[perPage:protected] => 15
[incrementing] => 1
[timestamps] => 1
[attributes:protected] => Array
(
[id] => 1
[rma_id] => 3
[item_id] => 8
[quo_id] => 0
[case_id] => i2eM20160120
[line_no] => 000001
[content] => test
[status] => sent
[read] => 0
[sender] => Tester
[created_at] => 2016-01-20 18:03:44
[updated_at] => 2016-01-20 18:03:44
)
[original:protected] => Array
(
[id] => 1
[rma_id] => 3
[item_id] => 8
[quo_id] => 0
[case_id] => i2eM20160120
[line_no] => 000001
[content] => test
[status] => sent
[read] => 0
[sender] => Tester
[created_at] => 2016-01-20 18:03:44
[updated_at] => 2016-01-20 18:03:44
)
[relations:protected] => Array
(
)
[hidden:protected] => Array
(
)
[visible:protected] => Array
(
)
[appends:protected] => Array
(
)
[fillable:protected] => Array
(
)
[guarded:protected] => Array
(
[0] => *
)
[dates:protected] => Array
(
)
[touches:protected] => Array
(
)
[observables:protected] => Array
(
)
[with:protected] => Array
(
)
[morphClass:protected] =>
[exists] => 1
)
)
)
To działa dobrze, a to pokazuje, że istnieje tylko jeden komentarz na pozycji o identyfikatorze 1.
Co dotyczy mnie to, że zestaw danych jest powielany w [attributes:protected]
i [original:protected]
. To tylko kwestia testowania, a prawdziwy przypadek będzie składał się z tysięcy opinii, a posiadanie powielonego zbioru danych to ogromne marnowanie pamięci. Zestaw danych nie jest duplikowany, jeśli używam podejścia DB::table('table_name')
, ale jest to znacznie mniej wygodne.
Dlaczego firma laravel musi duplikować dane w modelu?
Czy istnieje sposób na zwrócenie tylko jednego zestawu danych?
Obecnie używam ->toArray()
do przycinania niepotrzebnych danych zaraz po zapytaniu, ale wykorzystanie pamięci nadal istnieje, ponieważ laravel nadal tworzy ten zestaw danych.
Technicznie nie trzeba używać wymowny jako ORM z laravel jest tylko to, co jest zbudowany w Jeśli nie podoba ci się sposób Eloquent generuje obiekty wtedy. użyj ORM, które Ci się podoba lub napisz swój własny kod, a następnie wyłącz Eloquent. – Pitchinnate
Wszelkie sugestie dotyczące ORM? @Pitchinnate – cytsunny
Nie jesteś pewien, że musiałbyś spojrzeć na wszystkie struktury, które zostały zwrócone przez różne ORMy, aby znaleźć taki, który Ci się podoba i nie masz na myśli tracenia pamięci. Największą ORM, o której wiem, że jest PHP, jest Doctrine. – Pitchinnate