【问题标题】:Laravel Relationship Array with integer column具有整数列的 Laravel 关系数组
【发布时间】:2020-03-01 12:05:04
【问题描述】:

分类表

产品表

我想与类别表建立关系 -> id 与 Product 表 category_id 为这种关系提出任何想法 具有整数列关系的数组

控制器

Products::with('category')->get();

产品型号

public function category() {
    return $this->hasMany(App\Models\Categories::class, 'id', 'category_id');
}

类别模型

public function product() {
    return $this->belongsTo(Products::class,'category_id', 'id');
}

【问题讨论】:

    标签: laravel eloquent orm foreign-keys laravel-6


    【解决方案1】:

    这对于数据透视表来说似乎是一个很好的案例,但如果出于某种原因您确实需要此架构,那么也许您可以使用子查询。

    Products::addSelect(['category' => Category::select('name')
        ->whereIn('id', 'destinations.category_id')
    ])->get();
    

    您必须查看您的 laravel 版本中是否有此功能。 https://github.com/laravel/framework/pull/29567

    如果您想将其作为模型的一部分,您可以将其添加为范围。

    public function scopeWithCategories($query) 
    {
        $query->addSelect(['category' => Category::select('name')
            ->whereIn('id', 'destinations.category_id')
        ]);
    }
    

    【讨论】:

      【解决方案2】:

      如果你想让它工作,你应该创建一个多对多关系。

      开始你的数据库应该是这样的:

      通过这种方式,您的产品和类别可以正确链接,如果您想向产品添加新类别或其他方式,您只需将类别和产品的 ID 添加到 category_product 表即可。

      然后对于您的关系方法,在您的 Product.php(模型)中,您将获得此关系方法:

      /**
       * @return BelongsToMany
       */
      public function categories(): BelongsToMany
      {
          return $this->belongsToMany(Category::class);
      }
      

      在您的 Category.php(模型)中:

      /**
       * @return BelongsToMany
       */
      public function products(): BelongsToMany
      {
          return $this->belongsToMany(Product::class);
      }
      

      您现在可以使用以下方法获取产品的所有类别:

      $product = Product::first();
      $product->categories;
      

      只是为了一些额外的信息。您可以使用模型来存储关系。

      例如,您想将类别 1、2、3 添加到产品中。

      你可以这样做:

      $product = Product::first();
      $product->categories()->sync([1, 2, 3]);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-03-10
        • 2023-01-19
        • 1970-01-01
        • 2018-08-09
        • 2017-11-03
        • 2018-11-10
        • 1970-01-01
        • 2015-11-12
        相关资源
        最近更新 更多