Hallo ZUsammen,
ich habe mir die letzten zwei Tage mit Doku und Google um die Ohren geschlagen um heraus zu finden was ich falsch mache. Leider ohne Erfolg.
Mein Problem:
Ich möchte zwei Tabellen über eine Many_Many Relation miteinander verbinden. Dazu habe ich die folgenden drei Tabellen angelegt:
Ausschnitt Tabelle mitglieder:
CREATE TABLE IF NOT EXISTS `mitglieder` (
`id` varchar(150) COLLATE utf8_bin NOT NULL,
`last_edit` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`starttime` date NOT NULL,
`endtime` date NOT NULL,
`disable` tinyint(4) unsigned NOT NULL DEFAULT '0',
...,
PRIMARY KEY (`id`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
Ausschnitt Tabelle mitglieder_lizenzen:
CREATE TABLE IF NOT EXISTS `mitglieder_lizenzen` (
`mitglieder_id` varchar(150) COLLATE utf8_bin NOT NULL,
`lizenzen_id` int(10) NOT NULL,
PRIMARY KEY (`mitglieder_id`,`lizenzen_id`),
KEY `lizenzen_id` (`lizenzen_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
Ausschnitt Tabelle lizenzen:
CREATE TABLE IF NOT EXISTS `lizenzen` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`last_edit` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
...
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=4 ;
Im Mitglieder Model steht unter Relation:
public function relations()
{
// NOTE: you may need to adjust the relation name and the related
// class name for the relations automatically generated below.
return array(
'lizenzen'=>array(self::MANY_MANY, 'Lizenzen',
'mitglieder_lizenzen(mitglieder_id, lizenzen_id)',
'together' => true),
);
}
Und bei dem Lizenzen Model:
public function relations()
{
// NOTE: you may need to adjust the relation name and the related
// class name for the relations automatically generated below.
return array(
'mitglieder'=>array(self::MANY_MANY, 'Mitglieder',
'mitglieder_lizenzen(mitglieder_id,lizenzen_id)'),
);
}
Wenn ich nun dies in einer View über folgenden Code aufrufe:
<?php
$this->renderPartial('_mitgliederlizenzen',array(
'mitglieder'=>$model,
'lizenz'=>$model->lizenzen,
), true);
?>
wird folgendes Query erzeugt:
Querying SQL: SELECT `t`.`id` AS `t0_c0`, `t`.`last_edit` AS `t0_c1`,
`lizenzen`.`id` AS `t1_c0`,
`lizenzen`.`last_edit` AS `t1_c1`, `lizenzen`.`name` AS `t1_c6`,
`lizenzen`.`sort` AS `t1_c7` FROM `mitglieder` `t` LEFT OUTER JOIN
`mitglieder_lizenzen` `lizenzen_lizenzen` ON
(`t`.`id`=`lizenzen_lizenzen`.`mitglieder_id`) LEFT OUTER JOIN `lizenzen`
`lizenzen` ON (`lizenzen`.`id`=`lizenzen_lizenzen`.`lizenzen_id`) WHERE
(`t`.`id`='FSG-MG-3e5c8abd-2d55-6b68-eaf9-0000425c2663')
Wenn ich mir die das Query anschaue stelle ich fest, dass er mir lizenzen_lizenzen zusammen bastelt aber leider nicht mitglieder_lizenzen. Hier läuft irgendwas falsch. Er verdoppelt einfach den gewählten Namen aus dem Model
Was mache ich Falsch?
Vielen Dank für euere Hilfe.
Gruß nz-duck