/** * Adds a relation from logTable to origin table. * * @param Table $logTable */ protected function addForeignKey(Table $logTable) { $table = $this->getTable(); if ($table->getForeignKeysReferencingTable($table->getName())) { //if already a foreignKey exist to origin table then don't add a second. return; } // create the foreign key $fk = new ForeignKey(); $fk->setForeignTableCommonName($table->getCommonName()); $fk->setForeignSchemaName($table->getSchema()); $fk->setPhpName('Origin'); $fk->setOnDelete('CASCADE'); $fk->setOnUpdate('CASCADE'); foreach ($table->getPrimaryKey() as $column) { $fk->addReference($logTable->getColumn($column->getName()), $column); } $logTable->addForeignKey($fk); }
$fkCategoryPost->addReference('category_id', 'id'); $fkCategoryPost->setForeignTableCommonName('blog_category'); $fkCategoryPost->setRefPhpName('Posts'); $fkCategoryPost->setPhpName('Category'); $fkCategoryPost->setDefaultJoin('Criteria::INNER_JOIN'); $fkCategoryPost->setOnDelete('SETNULL'); $fkPostTag = new ForeignKey('fk_post_has_tags'); $fkPostTag->addReference('post_id', 'id'); $fkPostTag->setForeignTableCommonName('blog_post'); $fkPostTag->setPhpName('Post'); $fkPostTag->setDefaultJoin('Criteria::LEFT_JOIN'); $fkPostTag->setOnDelete('CASCADE'); $fkTagPost = new ForeignKey('fk_tag_has_posts'); $fkTagPost->addReference('tag_id', 'id'); $fkTagPost->setForeignTableCommonName('blog_tag'); $fkTagPost->setPhpName('Tag'); $fkTagPost->setDefaultJoin('Criteria::LEFT_JOIN'); $fkTagPost->setOnDelete('CASCADE'); /* Regular Indexes */ $pageContentFulltextIdx = new Index('page_content_fulltext_idx'); $pageContentFulltextIdx->setColumns([['name' => 'content']]); $pageContentFulltextIdx->addVendorInfo(new VendorInfo('mysql', ['Index_type' => 'FULLTEXT'])); /* Unique Indexes */ $authorUsernameUnique = new Unique('author_password_unique_idx'); $authorUsernameUnique->setColumns([['name' => 'username', 'size' => '8']]); /* Behaviors */ $timestampableBehavior = new TimestampableBehavior(); $timestampableBehavior->setName('timestampable'); $sluggableBehavior = new SluggableBehavior(); $sluggableBehavior->setName('sluggable'); /* Tables */
public function testSetNames() { $fk = new ForeignKey(); $fk->setName('book_author'); $fk->setPhpName('Author'); $fk->setRefPhpName('Books'); $this->assertSame('book_author', $fk->getName()); $this->assertSame('Author', $fk->getPhpName()); $this->assertSame('Books', $fk->getRefPhpName()); }