エラー文『Invalid argument supplied for foreach()』にハマった
タイトルに記載のあるエラーを解消するために小一時間戦っておりました。
今後、同じ失敗を繰り返さないために記録を残します。
事象
ECアプリ作成においてカートの実装をしていたのですが、indexメソッドにてforeachの引数エラーがでました。
エラー文:Invalid argument supplied for foreach()
どうもこちらのエラーは「foreachの引数が不正だよ」という意味のようです。
class CartController extends Controller
{
public function index()
{
$user = User::findOrFail(Auth::id());
$products = $user->products;
$totalPrice = 0;
foreach($products as $product){
$totalPrice += $product->price * $product->pivot->quantity;
}
return view('user.cart',
compact('products', 'totalPrice'));
}
要はカートに入れた商品の数×商品の単価をindexで表示したかった訳ですね。
試したこと
https://qiita.com/takuma-jpn/items/678876ad12b9ae9998ac
上記の記事を発見し、foreachの前に(array)をつけることで解決できると思ったのですが、今度はViewファイルの方でエラーがでてしまい、沼にハマってしまいました。
結論
コントローラー内の記述に問題があった訳ではなく、UserモデルとProductモデル間のリレーションに不備がありました。
リレーションの確認をしたところ、UserモデルにProductをリレーションを定義するための以下の記載が漏れていたようです…
use App\Models\Product;
リレーションが定義されてなければそりゃあ引数も空になるよね…っていうことですね。
毎日エラーと戦ってばかりですが、継続してPHPの学習がんばります!
Author And Source
この問題について(エラー文『Invalid argument supplied for foreach()』にハマった), 我々は、より多くの情報をここで見つけました https://qiita.com/ky_0225/items/1737dac5bd57e878485e著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .