如何在laravel ORM qloquent中使用多对多多态关系时设置主键?

时间:2018-04-05 01:02:56

标签: laravel eloquent

我在laravel中使用了多对多的多态关系 当我阅读文档many-to-many-polymorphic-relations时,它会说

  

博客文章和视频模型可以与标签模型共享多态关系。

这是表结构:

posts  
    id - integer   
    name - string    

videos  
    id - integer  
    name - string  

tags      
    id - integer  
    name - string  


taggables

    tag_id - integer
    taggable_id - integer
    taggable_type - string

我总是为表格设置一个主键 在这种情况下,我应该添加一个id列作为主键还是我不需要设置主键?
有没有约定?

1 个答案:

答案 0 :(得分:0)

在表taggables中,id自动增量ID不是很有用。对于taggables eloquent,您可以禁用主键,时间戳:

/**
 * primaryKey 
 * 
 * @var integer
 * @access protected
 */
protected $primaryKey = null;

/**
 * Indicates if the IDs are auto-incrementing.
 *
 * @var bool
 */
public $incrementing = false;

/**
 * The table associated with the model.
 *
 * @var string
 */
protected $table = 'taggables';

/**
 * Indicates if the model should be timestamped.
 *
 * @var bool
 */
public $timestamps = false;

要创建主键,可以创建3列复合主键。

创建复合主键时,您可能需要考虑列顺序

这取决于应用程序的用例。如果它始终查询帖子/视频的标签,则应创建此主键PRIMARY KEY(taggable_type, taggable_id, tag_id)。如果是另一种情况,它始终会查询标记的帖子/视频,则应创建此主键PRIMARY KEY(tag_id, taggable_type, taggable_id)

另请参阅:Many-to-Many Mapping table