2017-09-23 2 views
0

Je suis confronté à un problème. Je veux trouver les produits qui appartiennent au produit actuel (category_ids). Je suis dans la page de détail du produit. Voici ma structure de la table: - enter image description herecomment chercher des produits dans laravel en utilisant regexp

Maintenant vois actuellement j'ouvre le 2 produit dans le navigateur et ayant category_ids (4,2) Maintenant, je veux aller chercher tous les produits ayant la category_id 4 ou 2 dans mon cas i Je veux aller chercher le 3ème produit mais ça ne marche pas .. voir le 3ème produit ayant category_id (1,2,6) donc je veux aller chercher cet enregistrement ... Donc si j'ouvre le 3ème produit dans le navigateur je veux aller chercher le 2 produit. J'espère que vous les gars undertstand voici mon code: -

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

Cette requête ci-dessus me montre un résultat vide. S'il vous plaît aidez-moi comment résoudre. J'utilise laravel 5.2

+0

Excusez-moi, mais pourquoi n'êtes-vous pas en utilisant plusieurs à plusieurs ? –

+0

Je travaille sur des filtres. Un produit appartient à plusieurs catégories .. – kunal

+0

Oui, vous avez un produit qui appartient à plusieurs catégories et votre catégorie a de nombreux produits. Si vous définissez une relation plusieurs à plusieurs entre eux, vous pouvez faire n'importe quel type de filtrage facilement. –

Répondre

0

Eh bien, si c'est ce que vous voulez, selon votre commentaire, vous pouvez le faire comme ça. D'abord, vous devez créer une relation appropriée entre vos produits et vos catégories.

Sur votre produit modèle:

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

Sur votre catégorie modèle:

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

Ensuite, vous devez creat un tableau croisé dynamique permettant de connecter ces deux modèles. Alors créez une migration pour cela.

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'); 
    } 
} 

Maintenant, vous pouvez faire une petite fonction et l'accès et l'envoyer à votre point de vue via le contrôleur:

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(); 
}