Hello
I want to assign a contact person(german: "Ansprechpartner") to
different kinds
of a model.
my model looks like this:
<pre>
class Ansprechpartner extends AppModel
{
var $name = 'Ansprechpartner';
var $useTable = "ansprechpartner";
var $primaryKey = "ans_id";
var $recursive = 2;
var $hasAndBelongsToMany = array(
'Kunde' =>
array('className' => 'Kunde',
'joinTable' => 'kunden_ansprechpartner',
'foreignKey' => 'ansprechpartner_id',
'associationForeignKey'=> 'kunden_id',
'uniq' => true),
'Traeger' =>
array('className' => 'Traeger',
'joinTable' =>
'traeger_ansprechpartner',
'foreignKey' =>
'ansprechpartner_id',
'associationForeignKey'=>
'traeger_id',
'uniq' => true,
),
'Verbund' =>
array('className' => 'Verbund',
'joinTable' =>
'verbunde_ansprechpartner',
'foreignKey' =>
'ansprechpartner_id',
'associationForeignKey'=>
'verbunde_id',
'uniq' => true,
)
);
}
</pre>
one of the dependend models look like this ("Kunden" and "Verbund"
look the same)
<pre>
class Traeger extends AppModel
{
var $useTable="traeger";
var $primaryKey="t_id";
var $name="Traeger";
var $displayField="t_name";
var $hasMany=array("Traegerzugehoerigkeit"=>
array("className"=>"Traegerzugehoerigkeit",
"foreignKey"=>"t_id"));
var $hasAndBelongsToMany = array( 'Ansprechpartner' =>
array('className' =>
'Ansprechpartner',
'joinTable' =>
'traeger_ansprechpartner',
'foreignKey' => 'traeger_id',
'associationForeignKey'=>
'ansprechpartner_id',
'uniq' => true));
}
</pre>
One thing is, that only one of the dependend models id is given. My
controller which saves
the "Ansprechpartner" looks like this:
<pre>
// only the saving function shown:
function view($id=null)
{
if(empty($this->params['data']))
{
// edit record
} else {
// insert selector to which model should this
Ansprechpartner be
assigned
// default should be Kunde
$this->params['data']['Ansprechpartnerfunktion']['Ansprechpartnerfunktion']=array_unique(explode("|",$this->params['data']['Ansprechpartner']['selfunktionen']));
if(isset($this->params['data']['Traeger']) &&
strlen($this->params['data']['Traeger']['Traeger']))
{
// if isset save to traeger
$t_id=$this->params['data']['Traeger']['Traeger'];
$this->params['data']['Traeger']['Traeger']=array($this->params['data']['Traeger']['Traeger']);
print_r($this->params['data']['Traeger']['Traeger']);
print_r($this->params['data']);
$redirect="/Traeger/show/".$t_id;
} else
if(isset($this->params['data']['Verbund']) &&
strlen($this->params['data']['Verbund']['Verbund'])){
//if isset save to verbund
// not implemented yet
} else {
// default save to kunde
$this->params['data']['Kunde']['Kunde']=array($this->params['data']['Kunde']['Kunde']);
$redirect="/Kunden/show";
}
print_r($this->params['data']);
$this->Ansprechpartner->Save($this->params['data']);
exit;
$this->redirect($redirect);
}
}
</pre>
this is what my $this->params['data'] looks like:
<pre>
Array
(
[Ansprechpartner] => Array
(
[ans_id] =>
[selfunktionen] => |2|4
[ans_name] => asdfasdfasdf
[ans_vorname] => asdfasdfasdf
[ans_anrede] => asdfasdfasdf
[ans_titel] => asdfasdf
[ans_abteilung] => asdfasdfasdfasdfasdfasasdfasdf
[ans_vermerk] => asdfasdf
[ans_tel] =>
[ans_mobil] =>
[ans_fax] =>
[ans_email] =>
)
[Kunde] => Array
(
[Kunde] =>
)
[Ansprechpartnerfunktion] => Array
(
[Ansprechpartnerfunktion] => Array
(
[0] =>
[1] => 2
[2] => 4
)
)
[Traeger] => Array
(
[Traeger] => Array
(
[0] => 4
)
)
[Verbund] => Array
(
[Verbund] =>
)
)
</pre>
looks good, I think!
what i expected it would do is: insert a new "Ansprechpartner" and
insert a new
record into my assignment table to the model "Traeger" (Table:
traeger_ansprechpartner)
and this is what debug=2 says in sql:
<pre>
17 INSERT INTO `ansprechpartner`
(`ans_name`,`ans_vorname`,`ans_anrede`,`ans_titel`,`ans_abteilung`,`ans_vermerk`)
VALUES
('asdfasdfasdf','asdfasdfasdf','asdfasdfasdf','asdfasdf','asdfasdfasdfasdfasdfasasdfasdf','asdfasdf')
1 2
//ok, what i expected!
18 DELETE FROM `kunden_ansprechpartner` WHERE ansprechpartner_id =
'73' 0 1
19 INSERT INTO `kunden_ansprechpartner` (ansprechpartner_id,kunden_id)
VALUES ('73','2') 1 1
20 INSERT INTO `kunden_ansprechpartner` (ansprechpartner_id,kunden_id)
VALUES ('73','4') 1
// oops first thing went wrong. "4" is the id for "Traeger", not for
"Kunde" 1
21 DELETE FROM `ansprechpartner_ansprechpartner_funktionen` WHERE
ans_id = '73' 0 1
22 INSERT INTO `ansprechpartner_ansprechpartner_funktionen`
(ans_id,funk_id) VALUES ('73','4') 1 1
// also wrong, one is missing!!
23 DELETE FROM `traeger_ansprechpartner` WHERE ansprechpartner_id =
'73' 0 1
// here the "Traeger" is completely missing!!!!!
24 DELETE FROM `verbunde_ansprechpartner` WHERE ansprechpartner_id =
'73'
// ok
</pre>
Dont know how this can be! Seems as if the given arrays to the
save-method were shuffled!
What´swrong?
Thanks for your help
felle
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Cake
PHP" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at http://groups.google.com/group/cake-php
-~----------~----~----~----~------~----~------~--~---