laravel与自定义查询的多对多关系

时间:2019-03-22 06:48:05

标签: laravel

我有两个具有多对多关系的餐桌产品和道具。 每个产品都有一些道具,每个道具都有一些产品。 在搜索过滤器中,我只需要获取带有选定道具的产品。 我该怎么办?

Schema::create('products', function (Blueprint $table) {
    $table->bigIncrements('id');
    $table->string('title');
    ....
    $table->timestamps();
});
Schema::create('props', function (Blueprint $table) {
    $table->bigIncrements('id');
    $table->string('title');
    ....
    $table->timestamps();
});

Schema::create('product_prop', function (Blueprint $table) {
    $table->bigIncrements('id');
    $table->unsignedBigInteger('product_id');
    $table->unsignedBigInteger('prop_id');
    $table->timestamps();
    $table->foreign('product_id')
          ->references('id')
          ->on('products')
          ->onDelete('cascade');
    $table->foreign('prop_id')
          ->references('id')
          ->on('props')
          ->onDelete('cascade');
});

products: 
id=> 1, title=> p1
id=> 2, title=> p2
id=> 3, title=> p3
id=> 4, title=> p4
id=> 5, title=> p5
props:
id=> 1, title=> p1
id=> 2, title=> p2
id=> 3, title=> p3
id=> 4, title=> p4
id=> 5, title=> p5

product 1 has prop 1 and 2
product 3 has prop 2 and 4
product 4 has prop 5

$selectedProps = [1,5] 

所以我需要得到产品1和4! 但我不知道该怎么去。

1 个答案:

答案 0 :(得分:0)

尝试以下代码, 在此之前,我认为 您有Products模型和Props模型。

在您的Product模型中

public function props(){
   return $this->hasMany('Props');
}

以及您的Props模型中

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

现在,建造者可以获得所选道具的产品。

Props::with('product')->whereHas('product')->where('id', $selectedPropsId)->get();

注意:我的回答基于您的问题,很抱歉,您的问题没有更多信息。