Nasıl benim CakePHP modeli derneklerinden biri için farklı bir kimliği alanı kullanabilirsiniz?

3 Cevap php

Ben bir şey aşağıda olarak tanımlanan birçok statüler olabilir hangi birçok derneğe bir tane var:

Durum Modeli:

class Status extends AppModel
{
    var $name = 'Status';

    var $belongsTo = array(
        'Thing' => array(
            'className' => 'Thing',
            'foreignKey' => 'thing_id',
    );
}

Şey Model:

class Thing extends AppModel
{
    var $name = 'Thing';    

    var $belongsTo = array(
        // other associations
    );

    var $hasMany = array(
        'Status' => array(
            'className' => 'Status',
            'foreignKey' => 'thing_id',
            'dependent' => false,
            'order' => 'datetime DESC',
            'limit' => '10',
        ),
        // other associations
    );
}

Bu Tamam çalışır, ancak ben Thing Durum bağlanmak için farklı bir kimlik kullanmak istiyorum. Örneğin Şey, diğer dernekler var hepsi için 'id' kullanmak ama bu durumu dernek kullanıcısı için 'thing_status_id' kullanmak istiyorum.

Ben en iyi bu nasıl yapabilirim?

3 Cevap

Sonunda sadece bir SQL alt sorgu ile bir finderQuery kullanarak işe alabilir.

İşte benim Modeli:

class Thing extends AppModel
{
    // ...

    var $hasMany = array(
        'Status' => array(
            'className' => 'Status',
            'foreignKey' => 'thing_id',
            'dependent' => false,
            'limit' => 10,
            'finderQuery' => '
                SELECT Status.* 
                FROM statuses AS Status 
                WHERE Status.thing_id = (
                    SELECT Thing.status_thing_id 
                    FROM things AS Thing 
                    WHERE Thing.id = {$__cakeID__$}
                )
                ORDER BY Status.datetime DESC
                LIMIT 0, 10',
        ),
    ),

    // ...
}

Gerçekten garip şey 'sınırı' kaldırırsanız => 10 satır (hala benim SQL SINIRI 0,10 gerekir) bir şey yapmaz bile sorgu artık, düzgün çalıştığını çizgi olduğunu.

O (Thing id kendi kullanır) Başka bir kaynaktan veri alır gibi durum tablo ben fazla denetime sahip değilsiniz.

Belki bir "çeviri tablosunu" tanıtmak ve bunun dışında bir HABTM ilişki yapmak daha iyidir. Ayrıca kesinlikle gerekli değil verilerle Şey tablonun "kirlilik" dengeler.

things
   id
   ...

   HABTM Status
       with => ThingAltId

thing_alt_ids
   id
   thing_id
   status_thing_id
   ...possibly other ids used to identify Thing in 3rd party systems...

statuses
   id
   thing_id

   HABTM Thing
       with => ThingAltId

Sen foreignkey tanımlayabilirsiniz ne olursa olsun want.So Ben sadece 'foreignKey' => 'thing_status_id', için 'foreignKey' => 'thing_id', değiştirebilir ve de sütun thing_id değiştirebilir düşünüyorum tablo Statuses.