Я рекомендую hasAndBelongsToMany.Помните, что поездка может иметь несколько мест, а не только два.
Я бы перестроил ваши столы следующим образом:
CREATE TABLE IF NOT EXISTS `trips` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`user_id` bigint(20) NOT NULL,
`published` int(1) DEFAULT NULL,
`created` datetime DEFAULT NULL,
`modified` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
) ;
CREATE TABLE IF NOT EXISTS `locations` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL
PRIMARY KEY (`id`)
);
CREATE TABLE IF NOT EXISTS `locations_trips` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`location_id` bigint(20) NOT NULL
`trip_id` bigint(20) NOT NULL,
PRIMARY KEY (`id`)
);
и позволил бы CakePHP испечь это и позаботиться об остальном (он автоматически выберет отношение HABTM из общей таблицы.
РЕДАКТИРОВАТЬ: Извините, основываясь на ваших комментариях, я думаю, что это было бы лучше:
CREATE TABLE IF NOT EXISTS `trips` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`user_id` bigint(20) NOT NULL,
`locationfrom_id` bigint(20) NOT NULL,
`locationto_id` bigint(20) NOT NULL,
`published` int(1) DEFAULT NULL,
`created` datetime DEFAULT NULL,
`modified` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
) ;
CREATE TABLE IF NOT EXISTS `locations` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL
PRIMARY KEY (`id`)
);
, а затем использовать несколько отношенийк той же модели, что и ниже: http://book.cakephp.org/1.3/view/1046/Multiple-relations-to-the-same-model
Для вашего примера locationfrom_id и locationto_id будут принадлежать двум классам, которые будут иметь одно и то же "className", то есть Locations.