2017-09-23 35 views
0

私は問題に直面しています。私は現在の製品(category_ids)に属する製品を探したい。私は商品詳細ページにいます。ここでは、テーブルの私の構造は次のとおりです。 - enter image description hereregexpを使ってlaravelで製品を取得する方法

今現在、私はブラウザに2製品を開き、category_ids(4,2)を有する参照今私は私が私の場合にはCATEGORY_ID 4または2を持つすべての製品を取得したいです3番目の製品を取得したいが動作していません.. category_id(1,2,6)を持つ3番目の製品を参照してください。そのレコードを取得したいので...ブラウザで3番目の製品を開くと、2つの製品が取得されます。 。あなたたちはここにundertstand願うことは、私のコードは次のとおりです。 -

$recomendedProducts = Product::with('product_image') 
        ->whereRaw("category_ids REGEXP '".$productDetail['category_ids']. "'") 
         ->where('id','!=',$productDetail['id']) 
        ->inRandomorder() 
         ->take(5) 
         ->get(); 

これ以上のクエリは私に空の結果を示しています。解決方法を教えてください。私はlaravelを使用しています。5.2

+0

は、恐れ入りますが、なぜあなたは、多くの関係に多くを使用していません? –

+0

私はフィルターを取り組んでいます。 1つの製品が多くのカテゴリに属しています。 – kunal

+0

はい、多くのカテゴリに属し、カテゴリには多くの製品があります。それらの間に多対多の関係を設定すると、あらゆる種類のフィルタリングを簡単に行うことができます。 –

答えて

0

あなたが望むものなら、あなたのコメントによれば、このようにすることができます。

まず、プロダクトとカテゴリの間に適切な関係を作成する必要があります。あなたのカテゴリモデルに

public function category() 
{ 
    return $this->belongsToMany('App\Category'); 
} 

:あなたの製品モデルに

public function product() 
{ 
    return $this->belongsToMany('App\Product'); 
} 

次は、これらの二つのモデルを接続するために適切なピボットテーブルをレコード生成する必要があります。そのために移行を作成します。

php artisan make:migration create_category_product_table

<?php 

use Illuminate\Support\Facades\Schema; 
use Illuminate\Database\Schema\Blueprint; 
use Illuminate\Database\Migrations\Migration; 

class CreateCategoryProductTable extends Migration 
{ 
    /** 
    * Run the migrations. 
    * 
    * @return void 
    */ 
    public function up() 
    { 
     Schema::create('category_product', function (Blueprint $table) { 
      $table->increments('id'); 
      $table->unsignedInteger('category_id'); 
      $table->foreign('category_id')->references('id')->on('categories')->onDelete('cascade'); 
      $table->unsignedInteger('product_id'); 
      $table->foreign('product_id')->references('id')->on('products')->onDelete('cascade'); 
     }); 
    } 

    /** 
    * Reverse the migrations. 
    * 
    * @return void 
    */ 
    public function down() 
    { 
     Schema::dropIfExists('category_product'); 
    } 
} 

今、あなたは少しの関数を作成し、それをアクセスし、コントローラを介して、あなたの意見にそれを送ることができます。

public function getRelatedProducts($product){ 
     $related_category_ids = $product->category()->pluck('categories.id'); 
     return $relatedProducts = Product::whereHas('category', function ($q) use($related_category_ids) { 
     $q->whereIn('category_id', $related_category_ids); 
    }) 
     ->where('id', '<>', $product->id) 
     ->take(4) 
     ->inRandomOrder() 
     ->get(); 
} 
関連する問題