Crie uma associação muitos para muitos com Idiorm / Paris

Por mais simples que seja, eu lutei um pouco com isso, pois não é explicitamente discutido nos documentos ( http://paris.readthedocs.org/en/latest/associations.html#has-many-through )

A ideia é que você tenha dois modelos com um has_many_throughrelacionamento e um modelo intermediário para gerenciar esse relacionamento.

Um pouco de magia DB para ligar as coisas:

CREATE TABLE IF NOT EXISTS `Addresses` (
`id` int(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY
(`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

CREATE TABLE IF NOT EXISTS
`Users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY
(`id`),
KEY
`id` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;

CREATE TABLE IF NOT EXISTS
`AddressUser` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`Addresses_id` int(11) NOT NULL,
`Users_id` int(11) NOT NULL,
PRIMARY KEY
(`id`),
KEY
`id` (`id`),
KEY
`Addresses_id` (`Addresses_id`),
KEY
`Users_id` (`Users_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;

ALTER TABLE
`AddressUser`
ADD CONSTRAINT
`AddressUser_ibfk_3` FOREIGN KEY (`Users_id`) REFERENCES `Users` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION,
ADD CONSTRAINT
`AddressUser_ibfk_4` FOREIGN KEY (`Addresses_id`) REFERENCES `Addresses` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION;

Os principais modelos:

// One side of the relationship
class User extends Model {
public static $_table = 'Users';
public function addresses() {
return $this->has_many_through('Address');
}
}

// Another side of the relationship
class Address extends Model {
public static $_table = 'Addresses';
public function users() {
return $this->has_many_through('User');
}
}

// Intermediate model for managing the relationship
class AddressUser extends Model {
public static $_table = 'AddressUser';
}

Em seguida, para criar uma associação ou vincular dois dos modelos principais:

$address_user = Model::factory('AddressUser')->create();
$address
= Model::factory('Address')->find_one($address_id);
$user
= Model::factory('User')->find_one($user_id);

// Just to make sure these entities actually exist in the db
if ($address && $user) {
$address_user
->addresses_id = $address->id;
$address_user
->users_id = $user->id;
$address_user
->save();
}

Neste ponto, você deve ser capaz de criar novas linhas na AddressUsertabela que se vinculem aos modelos corretos nas respectivas tabelas Addressese Users.