Adlı bir Zend Framework uygulaması için aşağıdaki tablolar kurulumu varsayalım.
user (id)
groups (id)
groups_users (id, user_id, group_id, join_date)
Ben temelde bana verir modelleri Veri Mapper yaklaşım aldı:
- Model_User, Model_UsersMapper, Model_DbTable_Users
- Model_Group, Model_GroupsMapper, Model_DbTable_Groups
- Model_GroupUser, Model_GroupsUsersMapper, Model_DbTable_GroupsUsers (aentities olarak görülebilir ilişkileri tutmak için, "join_date" özelliği fark)
I Model_DbTable_GroupsUsers olarak _referenceMap tanımlayan ediyorum:
protected $_referenceMap = array (
'User' => array (
'columns' => array('user_id'),
'refTableClass' => 'Model_DbTable_Users',
'refColumns' => array('id')
),
'App' => array (
'columns' => array('group_id'),
'refTableClass' => 'Model_DbTable_Groups',
'refColumns' => array('id')
)
);
Aklımda bu tasarım sorunlar yaşıyorum:
1) Model_Group sadece gruplar tablodaki alanları aynalar. Nasıl bir grup toplama bir kullanıcı tarih de bir üyesidir ve dönebilirsiniz kullanıcının katıldığı her grup için grup? Ben sadece etki alanı nesnesi özelliğini ekledi, sonra ben olmaz, grup mapper bu konuda bildirmek olurdu?
2) Diyelim ki bir kullanıcının ait gruplarını almak gerekiyor diyelim. Nerede bu mantığı koymak gerekir? Model_UsersMapper veya Model_GroupsUsersMapper?
Ben de başvuru haritada (bağımlı tablolar) mekanizması faydalanmak ve muhtemelen findManyToManyRowset veya findDependentRowset, gibi bir şey kullanmak istiyorsanız:
$result = $this->getDbTable()->find($userId);
$row = $result->current();
$groups = $row->findManyToManyRowset(
'Model_DbTable_Groups',
'Model_DbTable_GroupsUsers'
);
Ben sadece tek bir sorguda yazılmış olabilirdi bu iki sorgu üretecektir. Ben Model_GroupsUsersMapper sınıfta bu yerleştirecektir.
Bir geliştirme ikinci soru için yalvarır veri mapper uygun yöntemini çağırarak gerektiğinde tembel grupları yükler Model_User etki alanı nesnesi bir GetGroups yöntem eklemek olacaktır. Ben etki alanı nesnesi veri eşleştiricisine hakkında bilmek izin gerekir?