If you are working with Phalcon, you will probably need to establish a many-to-many relationship between models. While i was searching in the official documentation, this was not very clear for me at that time. I posted this question on the form, and i got the correct answer.
I will explain you here, step by step. As an example, we will think about the following database structure:
Article table:
CREATE TABLE IF NOT EXISTS `article` ( `id` int(11) NOT NULL AUTO_INCREMENT, `title` varchar(100) CHARACTER SET latin1 DEFAULT NULL, `content` text CHARACTER SET latin1, `slug` varchar(160) CHARACTER SET latin1 NOT NULL, `created_at` datetime NOT NULL, `updated_at` datetime NOT NULL, PRIMARY KEY (`id`), KEY `title` (`title`,`created_at`), KEY `slug` (`slug`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=1 ;
Category table:
CREATE TABLE IF NOT EXISTS `category` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) CHARACTER SET latin1 NOT NULL, `slug` varchar(255) CHARACTER SET latin1 DEFAULT NULL, `left_node` int(11) NOT NULL, `right_node` int(11) NOT NULL, PRIMARY KEY (`id`), KEY `idx_name` (`name`), KEY `idx_slug` (`slug`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=1 ;
articles_categories table:
CREATE TABLE IF NOT EXISTS `articles_categories` ( `id` int(11) NOT NULL AUTO_INCREMENT, `article_id` int(11) NOT NULL, `category_id` int(11) NOT NULL, PRIMARY KEY (`id`), KEY `article_id` (`article_id`), KEY `category_id` (`category_id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ; ALTER TABLE `articles_categories` ADD CONSTRAINT `articles_categories_ibfk_1` FOREIGN KEY (`article_id`) REFERENCES `article` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, ADD CONSTRAINT `articles_categories_ibfk_2` FOREIGN KEY (`category_id`) REFERENCES `category` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;
Article model:
hasManyToMany( "id", "Models\ArticlesCategories", "article_id", "category_id", "Models\Category", "id", array('alias' => 'categories') ); } }
Category model:
hasManyToMany( "id", "Models\ArticlesCategories", "category_id", "article_id", "Models\Article", "id", array('alias' => 'articles') ); } }
ArticlesCategories model:
belongsTo('category_id', 'Models\Category', 'id', array('alias' => 'category') ); $this->belongsTo('article_id', 'Models\Article', 'id', array('alias' => 'article') ); } }
Easy, huh ? See the original post. I hope this was helpful đ