【问题标题】:Laravel eloquent models with many to many relationship, without integer keysLaravel 雄辩的模型,具有多对多关系,没有整数键
【发布时间】:2015-07-18 05:23:08
【问题描述】:

我的表中定义的主键是 UUID。当我定义多对多关系并尝试同步相关记录时,我收到错误消息:

insert into "productoption" ("optionid", "productid") values (d359a612-5169-4c0d-a7d7-9d1c4f8dda9f, 732a9cb3-d14f-4343-9d0c-3794b58f2f6f))

正如你所见,UUID 值没有被引用,这会从 PostgreSQL 中引发异常。

在我的模型中,我有:

public $incrementing = false;

这有助于暗示 Eloquent 模型键不是整数,必须以不同方式处理。因为数据透视表没有自己的模型,所以我不知道如何告诉 Eloquent 用于连接表的键不是整数。

最好的解决方法是什么?

我用:

  • Laravel 5.1
  • PHP 5.6
  • PostgreSQL 9.3

【问题讨论】:

    标签: laravel many-to-many pivot


    【解决方案1】:

    在模型中声明关系方法时,您可以尝试以下操作:

    // Product.php
    protected $primaryKey = 'product_uuid';
    public function options()
    {
        return $this
               ->belongsToMany('App\Option', 'product_option', 'product_uuid', 'option_uuid');
    }
    
    // Option.php
    protected $primaryKey = 'option_uuid';
    public function products()
    {
        return $this
               ->belongsToMany('App\Product', 'product_option', 'option_uuid', 'product_uuid');
    }
    

    区分两个表中的主键名称,使用 (product_uuidoption_uuid) 否则你会遇到更多麻烦。

    【讨论】:

      猜你喜欢
      • 2021-01-27
      • 1970-01-01
      • 2016-11-26
      • 2015-06-27
      • 1970-01-01
      • 1970-01-01
      • 2013-07-17
      • 2016-11-03
      • 2013-01-22
      相关资源
      最近更新 更多