首页 > 解决方案 > 如何在 Laravel 中的另一个关系中获取 hasmany 关系

问题描述

如何在 Laravel 中的另一个关系中获取 hasmany 关系

我想获得带有产品选项的产品选项组

我做的

    $try1 = Product::with(["optionGroups.options"])->find(1);

但这会返回所有组选项

我想获得仅包含产品选项的产品选项组

我希望它像

{
  "title": "产品名称",
  “选项组”:[
    {
      “名称”:“尺寸”,
      “选项”: [
        {
          “名称”:“XL”,
          “价格”:1200
        },
        {
          “名称”:“L”,
          “价格”:1000
        }
      ]
    }
  ]
}

楷模

class Product extends Model
{
    public function options()
    {
        return $this->hasMany(Option::class, 'product_id');
    }
    public function optionGroups()
    {
        return $this->belongsToMany(OptionGroup::class, 'options')->groupBy("id");
    }
}

class Option extends Model
{
    public function product()
    {
        return $this->belongsTo(\App\Models\Product::class, 'product_id', 'id');
    }
    public function optionGroup()
    {
        return $this->belongsTo(\App\Models\OptionGroup::class, 'option_group_id', 'id');
    }
}

class OptionGroup extends Model
{
    public $table = 'option_groups';
    public $fillable = [
        'name'
    ];
    public function options()
    {
        return $this->hasMany(Option::class, 'option_group_id');
    }
}

Schema::create('products', function (Blueprint $table) {
    $table->id('id');
    $table->string('title');
});
Schema::create('options', function (Blueprint $table) {
    $table->increments('id');
    $table->string('name', 127);
    $table->double('price', 8, 2)->default(0);
    $table->integer('product_id')->unsigned();
    $table->integer('option_group_id')->unsigned();
});
Schema::create('option_groups', function (Blueprint $table) {
    $table->increments('id');
    $table->string('name', 127);
});

请帮我

标签: laraveleloquenthas-manyhas-and-belongs-to-many

解决方案


Product::whereHas('optionGroups', function($query){
     $query->with(['options']);
})->first();

推荐阅读