db-seeder icon indicating copy to clipboard operation
db-seeder copied to clipboard

Junction Table relation

Open desenvolvedorindie opened this issue 8 years ago • 1 comments

Hi, how can I create seeder for relation with junction table?

CREATE TABLE `video` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`id`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci

CREATE TABLE `tag` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`id`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci

CREATE TABLE `tag_video` (
  `tag_id` int(11) NOT NULL,
  `video_id` int(11) NOT NULL,
  PRIMARY KEY (`tag_id`,`video_id`),
  KEY `idx-tag_video-tag_id` (`tag_id`),
  KEY `idx-tag_video-video_id` (`video_id`),
  CONSTRAINT `fk-tag_video-tag_id` FOREIGN KEY (`tag_id`) REFERENCES `tag` (`id`) ON DELETE CASCADE,
  CONSTRAINT `fk-tag_video-video_id` FOREIGN KEY (`video_id`) REFERENCES `video` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci

I've tried:

$seeder->table('tag')->data([
    [1, 'PHP'],
    [2, 'POO'],
    [3, 'Java'],
    [5, 'Javascript']
], ['id', 'name'])->rowQuantity(5);

$seeder->table('video')->columns([
    'id',
    'name'=> $faker->sentence(6),
])->rowQuantity(50);

$seeder->table('tag_video')->columns([
    'tag_id' => [Generator::RELATION, 'tag', 'id'],
    'video_id' => [Generator::RELATION, 'video', 'id'],
]);

But I'm getting duplicated entry for N - N for 'PRIMARY'

desenvolvedorindie avatar Mar 24 '16 03:03 desenvolvedorindie

@desenvolvedorindie I have generated dummy data for related table. Check this http://www.smarttutorials.net/seedpopulate-mysql-database-dummytest-data-using-php-db-seeder/

muni2explore avatar Jul 09 '18 14:07 muni2explore