2016-06-14 18 views
5

pracuję wraz z serii @Jeffrey_way z Laracasts Many to Many Relations (With Tags)BadMethodCallException z komunikatem 'Call to metoda niezdefiniowany Illuminate database Query Builder :: ToArray()'

Poniżej znajduje się kod Pisałem w CMD przy użyciu laravel Tinker:

Po wykonaniu ostatniego wiersza kodu ($article->tags()->toArray();

Mimo wszystko wydaje się być OK wi th mojego kodu, ale wciąż dostaję następujący błąd:

BadMethodCallException with message 'Call to undefined method Illuminate\Database\Query\Builder::toArray()' 

każda pomoc będzie bardzo mile widziane :)

Odpowiedz

4

Jeśli chcesz rzeczywiście "uzyskać" dane relacyjne, nie wstawiaj nawiasów tags. Będzie to działać dobrze:

$article->tags->toArray(); 

umieścić nawias, gdy trzeba "zapytanie" do tej kolekcji (Ex sync, zapisać dołączyć.).

referencyjny: https://laravel.com/docs/5.1/eloquent-relationships#many-to-many

+0

Dziękuję Yigit Dodałem nawiasy z mojej własnej głupiej głowy: p chociaż nie było tego w teledysku szkoleniowym – Hazmat

+0

Nie ma za co. Baw się z Laravelem :) – YigitOzkavci

1

Spróbuj to zamiast:

$article->tags()->all()->toArray(); 

U podstaw tags() jest prawdopodobnie Query\Builder obiekt, który reprezentuje zapytanie, które jeszcze nie zostało uruchomione. Zamiast tego potrzebny jest obiekt Collection, który jest uruchomionym zapytaniem, do którego należy wywołać toArray(). ->all() jest jednym z takich wywołań, który konwertuje konstruktor kwerend do kolekcji przez faktyczne uruchomienie kwerendy.

+0

teraz otrzymuję ten błąd: 'BadMethodCallException z komunikatem 'Call to metoda niezdefiniowany Illuminate \ database \ Zapytanie \ Builder :: wszystkie()'' – Hazmat

+0

OK try get() zamiast wszystko() . To powinno działać. – delatbabel

+0

W zależności od wersji Laravel, all() może zwrócić kolekcję lub tablicę. Jeśli zwraca tablicę, to w ogóle nie potrzebujesz wcale -> toArray(). – delatbabel

Powiązane problemy