Laravel雄辩的模型具有多对多的关系,没有整数键

时间:2015-07-17 18:42:55

标签: laravel many-to-many pivot

我的表中定义的主键是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

1 个答案:

答案 0 :(得分:0)

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

// 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),否则您将陷入更多麻烦。