Adlandırma ve CakePKP'deki katıldı

1 Cevap php

Just a few days ago I found out about this miracle called CakePHP so I am pretty green to it. I need to build a mail application, so I have followed the convention and created:

Veritabanı açıklaması:

Kullanıcılar Tablo.

(foreign Anahtarı postaların (foreign için user_id), için.

Benim sorular:

1) Bu sözleşmeye göre, bir yabancı anahtar ilgili tablo + '_id' aranmalıdır. Aynı masaya ilgili iki yabancı anahtarlar varsa nasıl sütunları aramalısınız. Postalar tablosunda gelen ve gibi.

2) I would like to do an inner JOIN the between the two tables. Something like:

SELECT user_id, mail_id 
FROM users
INNER JOIN mails
ON users.user_id =mails.to AND mails.opened=false. 

Ama bunu yapmak için nasıl hiçbir ipucu var.

1 Cevap

Eğer aynı masaya iki ilişkileri yapmak gerektiğinde, varsayılan sözleşmeyi geçersiz kılmak gerekir. Sizin örnekte, ben 2 yabancı anahtarları yapacak. sender_id adında bir ve adlandırılmış bir recipient_id. Sonra şöyle Modelinde onlara katılmak istiyorum:

<?php

class Mail extends AppModel {
    //The Associations below have been created with all possible keys, those that are not needed can be removed
    var $belongsTo = array(
        'UserSender' => array(
            'className' => 'User',
            'foreignKey' => 'sender_id',
            'conditions' => '',
            'fields' => '',
            'order' => ''
        ),
            'UserRecipient' => array(
            'className' => 'User',
            'foreignKey' => 'recipient_id',
            'conditions' => '',
            'fields' => '',
            'order' => ''
        ),
    );
}
?>

Sonra koşullar yapmak için, bunu gibi onları referans olacaktır:

<?php
    $this->Mail->find(array('conditions'=>array('Mail.opened'=>false)));
?>

... Ve gönderici ve alıcı üzerinde filtre, kendi koşulları gibi görünecektir:

<?php
    $this->Mail->find(array('conditions'=>array('UserSender.some_field'=>$someValue,
                                                'UserRecipient.some_field'=>$someValue)));
?>