2016-06-14 14 views
5

sto lavorando insieme con la serie di @Jeffrey_way Laracasts Many to Many Relations (With Tags)BadMethodCallException con il messaggio 'Chiamata di metodo non definito Illuminate Database Query Builder :: toArray()'

Di seguito è il codice che ho scritto in CMD utilizzando laravel Tinker:

Dopo aver eseguito l'ultima riga di codice ($article->tags()->toArray();

Anche se tutto sembra essere wi OK th mio codice, ma ancora ottengo l'errore seguente:

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

qualsiasi aiuto sarebbe molto apprezzato :)

risposta

4

Se si desidera "ottenere" effettivamente dati relazionali, non si inserisce la parentesi tags. Questo funziona bene:

$article->tags->toArray(); 

Hai messo tra parentesi, quando è necessario "query" a quello di raccolta (Ex sync, salvo, attaccare.).

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

+0

Grazie Yigit stavo aggiungendo parentesi dalla mia testa stupida: p anche se non era nel video di formazione – Hazmat

+0

Prego. Divertiti con Laravel :) – YigitOzkavci

1

Prova a modificare:

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

Alla base del tags() è probabilmente un oggetto che rappresenta Query\Builder una query che non è ancora stata eseguita. Invece è necessario un oggetto Collection che è una query che è stata eseguita, su cui chiamare toArray(). ->all() è una di queste chiamate che converte un generatore di query in una raccolta eseguendo effettivamente la query.

+0

ora ottengo questo errore: 'BadMethodCallException con il messaggio 'Call to metodo non definito Illuminate \ Database \ Query \ Builder :: tutti()'' – Hazmat

+0

OK prova get() invece di tutti() . Questo dovrebbe funzionare – delatbabel

+0

A seconda della versione di Laravel, all() può restituire una raccolta o un array. Se restituisce un array, non è necessario il bit -> toArray(). – delatbabel

Problemi correlati