2017-01-12 3 views
0

データベースでは、 "categories"と "products"テーブルがあります。 「製品」表には、製品に複数のカテゴリーがあるため、配列であるcategory_ids列があります。Laravel 5 - DB値が配列であるかどうかを問い合わせる方法

category_idsが1の商品を検索したいのですが、私はこのようにしようとしていますが、作品ですが、もっと簡単なやり方が欲しいです。

上記のように、すべての製品をループして、カテゴリIDが製品カテゴリの配列に存在するかどうかを確認する必要があります。

もっと良い方法がありますので、すべての製品をチェックしていませんか?

答えて

0

1行を除くすべてのコードはOKです。

$catId = 1; //category ID 
$allProducts = Product::all(); // get all products 
foreach ($allProducts as $product) { //loop all the products 
    $cats = explode(',',$product->category_ids); 
    if(in_array($catId, $cats)) { // check if category ID is in array of its product categories 
     $products[] = Product::find($product->id); 
    } 
} 

この行を追加しました。私はそうin_array機能では、第二の要素があるべき

$cats = explode(',',$product->category_ids); 

(正しい方法そのませんが、あなたはM2Mテーブルを作成する必要があります)製品の複数のカテゴリをカンマ区切りで単一のフィールドに格納されると仮定します配列。 explodeの出力のため、$ catsは配列です。

in_array($catId, $cats) 
+0

こんにちは、お返事ありがとうございます。しかし、私はあなたがここで忘れてしまったと思う:)、申し訳ありません。 dbの値は配列です。category_idsカラムの属性キャスト配列を既に追加しているので、explodeを使用する必要はありません。事は上の私のコードですが、私はすべての製品をループせずにより良い方法があるかどうかを知りたいです。 whereInのようなものですが、whereInの逆関数です。 whereInは配列内にある場合、db値をチェックします。私はその逆の機能を望んでいます、もしそれが存在すればうれしいです。 – Wakanina

+0

ああ、私の答えはいいえ。 in_arrayは開発者の時間を節約するので、それを使用するのは良いことです:) –

関連する問題