2016-05-09 21 views
0

です。phpで配列を生成して、カート内の商品に割引があるかどうかを確認します。私のコード:は、パラメータ2が配列であると想定しています。オブジェクトは

public function actionPrices($request, $action) 
{ 
    $cartId = $request->cookie('cartid'); 
    $currentCart = Cart::findOrFail($cartId); 
    $items = CartItem::where('cart_id','=',$currentCart->id)->get(); 
    $foo = array(); 


    $actionFilters = ActionFilter::where('discount_action_id', $action->id)->lists('filter_options_id'); 
    //if there are no $actionfilters nothing needs an extra check 
    if (count($actionFilters) == 0) 
    { 
     foreach ($items as $item) 
     { 
      for($i = 0; $i < $item->amount; $i++) 
      { 
       array_push($foo, $item->ProductSize->product->Priceval); 
      } 

     } 
    } 
    else 
    { 
     foreach ($items as $item) 
     { 
      $product = $item->ProductSize->product; 
      $filters2 = ProductFilter::where('product_id', '=', $product->id)->lists('filter_option_id'); 
      $inArray = false; 
      foreach ($actionFilters as $f) { 


       //CODE CRASHED CHERE 
       if (in_array($f, $filters2)) { 
        $inArray = true; 
       } 
      } 
      if ($inArray) 
      { 
       for($i = 0; $i < $item->amount; $i++) 
       { 
        array_push($foo, $item->ProductSize->product->Priceval); 
       } 
      } 
     } 
    } 
    sort($foo); 
    return $foo; 
} 

この場所でクラッシュする可能性がありますか?

エラーは、引数2($ filters2)が配列ではないことを示しています。しかし、私はarrayを返すlists()関数で$ filters2を取得します。ドキュメントから

あなたは、単一の列の値を含む配列を取得したい場合は、リストのメソッドを使用することができます。

エラーを回避するにはどうすればよいですか?

+0

どのLaravelのバージョンをお使いですか?リストの動作は、5.1(ドキュメント内)と5.2間で変更されました。 –

+0

@JoelHinz私の作曲家のファイルには、 "laravel/framework": "5.1。*"、> php artisan --versionが私に与えます Laravel Frameworkバージョン5.1.30(LTS) –

答えて

1

Query Bulders's lists方法はIlluminate\Support\Collection

のコレクション()オブジェクトを返すので、ですから、これは

$filters2 = ProductFilter::where('product_id', '=', $product->id)->lists('filter_option_id')->toArray(); 

すなわちにコレクションを変換することが可能です。同じよう 間に合わせの何かを試してみてくださいアレイ。または...

つまり、php配列の代わりにCollectionのメソッドを使用します。

more

編集を参照してください:おっと! Laravelのdocは間違って言及しています:リストは配列を返します。

+0

- > toArray()worked - > containsそれは私がそれを使用することができなかったので、オブジェクトをwan't私に言った、 –

0

多分、$ filters2はすべての場合の配列ではありません。これは

  //CODE CRASHED CHERE 
      if (is_array($filters2) && in_array($f, $filters2)) { 
       $inArray = true; 
      } 
関連する問題