Kohana (KO3) Tabela dinâmica universal ORM (campos: model1, model1_id, model2, model2_id) - possível?

StackOverflow https://stackoverflow.com/questions/8869705

Pergunta

Tenho a seguinte configuração de modelos:

User
   - has_many File (for userpics)

Gallery
   - has_many File (for images)

Page
   - has_one File (for background image)

O objeto Página pode compartilhar um objeto Arquivo com um ou mais objetos Galeria como plano de fundo.E em algum estágio posterior, um novo modelo como

Product
   - has_many File

ou semelhante pode aparecer no aplicativo.

Observe que preciso de um modelo de arquivo em vez de apenas armazenar caminhos para os arquivos reais porque o modelo de arquivo pode fazer referência, de fato, a vários arquivos no sistema de arquivos

File
   - id
   - path
   - path_poster
   - path_m4v     (HTML5 videos need up to three files for compatibility)
   - path_webm
   - path_ogv
   - width
   - height
   - poster_width
   - poster_height
   - type
   - ... etc....

Então, há uma maneira simples (sem sobrescrever toda a classe ORM) de implementar relacionamentos que usariam uma tabela dinâmica "genérica" com os seguintes campos:

model_name VARCHAR(8) (or model_type_id TINYINT for speed)
model_id INT
file_id INT
relation_name VARCHAR(8)  (e.g., Page model can have "background" and "logo" relation)
position INT

O motivo: eu quero ter um módulo de aplicativo universal para verificar se há arquivos "órfãos" e também ser capaz de dizer a que cada arquivo está anexado, por exemplo, ao excluir um arquivo da Galeria, o aplicativo fariaavisar que o arquivo ainda está anexado a uma página como plano de fundo.

Foi útil?

Solução

A resposta curta é não.O motivo é porque model_id entraria em conflito com outros IDs de modelo.Se você quiser, pode fazer um índice exclusivo em model_name + model_id, mas para unir essas duas colunas seria necessário reescrever os métodos ORM para unir os modelos por meio de seus relacionamentos.

Honestamente, preferiria tabelas dinâmicas simples.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top