web-dev-qa-db-ja.com

BadMethodCallException with message '未定義のメソッドIlluminate \ Database \ Query \ Builder :: toArray()の呼び出し'

私はララキャストの@Jeffrey_wayシリーズと一緒に働いています 多対多の関係(タグ付き)

以下は、私がCMDでLaravel Tinkerを使用して書いたコードです:

コードの最後の行を実行した後($article->tags()->toArray();

私のコードではすべて問題ないようですが、それでも次のエラーが発生します。

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

どんな助けでも大歓迎です:)

リレーショナルデータを実際に「取得」したい場合は、tagsの周りに括弧を付けないでください。これは問題なく機能します。

$article->tags->toArray();

そのコレクションに「クエリ」する必要がある場合は、括弧を付けます(例:同期、保存、添付)。

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

5
YigitOzkavci

代わりにこれを試してください:

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

tags()の基礎となるのは、おそらくまだ実行されていないクエリを表す_Query\Builder_オブジェクトです。代わりに、実行されたクエリであるCollectionオブジェクトが必要であり、その上でtoArray()を呼び出します。 ->all()は、実際にクエリを実行することにより、クエリビルダーをコレクションに変換する呼び出しの1つです。

1
delatbabel

同じ問題があり、get()を追加して解決しました

例えば:

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

これが誰かに役立つことを願っています:)

0
AlmostPitt