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 cake-php@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at http://groups.google.com/group/cake-php
-~----------~----~----~----~------~----~------~--~---

Reply via email to