Bir model CakePHP birden fazla tablo olabilir mi?
Kılavuzunda bu cümleden tahmin:
Bir model veri tabanında belirli bir tablo, daha özel olarak genel veritabanı için bir erişim noktasıdır, ve. Varsayılan olarak, her model bir 'Kullanıcı' model 'kullanıcı' tablosunu kullanır yani isim, kendi çoğuludur bulunuyor tablosunu kullanır.
Ben öyle düşünmüyorum, ama belki ne gerek şu ilişkileri yapabilirsiniz.
Eğer çok aynı tablo var zaman olabilir Tabii, bu uygundur.
class SomeModel extends Model
{
var $useTable = false;
public function ReadData()
{
// select table
if($a == 1)
$this->setSource('tableName1');
else if($a == 2)
$this->setSource('tableName2');
// ...
else if($a == N)
$this->setSource('tableNameN');
// now perform operations with selected table
return $this->find('all');
}
}
Teknik olarak, ben bilmiyorum ki, sen soru soruyorsun yol göre. Sık olsa da, ben might sonra konum ne benzer bir şey için ilişkiler kullanacağız. Örneğin, bir kişinin kolayca yeterli insan tabloda düşmüş olabilir adres bilgileri var, ama ben genellikle diğer kişiler hakkında da adresleri (bir iş, vb) olabilir çünkü çekin tercih.
Aynı fikri size DB pseudo-kalıtım modeli çeşit uygulamak istiyorsanız. Örneğin, gönüllü insanlar vardır, ama çok yüklenicileri, satıcıları ve çalışanları vardır. Eğer bir kişi masa ve bunlar kişinin türüne özgü diğerleri saklamak isteyebilirsiniz tüm pay belli özellikleri.
Her iki durumda da iki model var, ama onlar kendi birlikleri aracılığı ile sorunsuz bir şekilde birlikte çalışır.
O Eğer düşünüyorsanız senaryo tür ise birden fazla tablo olan bir model hakkında olmasa da daha sonra benzer bir yaklaşım sizin için işe yarayabilecek.
I guess you want to implement some sort of inheritance in the database (that requires to join the data stored in the parent table when retrieving information from the child table). My approach to solve this was using afterFind callback in the child model. I redefined the callback as follows:
function afterFind($results) {
foreach ($results as $key => $val) {
$fieldRetrieved=$this->query("SELECT *field* FROM *parent_table* WHERE id={$val['*ChildModelName*']['id']}");
$results[$key]['*ChildModelName*']['*field*']=$fieldRetrieved[0]['*parent_table*']['*field*'];
}
return $results;
}
Bu şekilde ben alan / s ana tablodan alt tablo elde sonuçlara dahil edilmiştir. Bu durumda ben hem tablo id ve bu alan adında bir alan ile indeks olduğunu kabul ettik, alt tabloda, (böylece sözde miras oluşturma) da ana tabloya bir yabancı anahtardır.