2017-09-04 3 views
0

Est-il possible d'avoir de simples entités en lecture seule, qui peuvent avoir une association avec une autre entité de doctrine, mais leurs données sont stockées dans un fichier texte (YAML)?Symfony - Entités en lecture seule hydratées à partir de YAML

Disons que j'ai une entité product, et je veux définir une catégorie pour chaque produit. Mais pour l'instant, je n'ai que très peu de catégories (et je n'ai pas besoin d'éditer ou d'ajouter), donc je ne veux pas/ne dois pas créer une entité de doctrine complète avec sa propre table dans la base de données.

Je crée donc une entité très simple:

class ProductCategory 
{ 

    private $id; 
    private $name; 

    public function getId() 
    { 
     return $this->id; 
    } 

    public function getName() 
    { 
     return $this->name; 
    } 

} 

Maintenant, je voudrais créer un simple fichier YAML où les données sont stockées, comme ceci:

0: Cheese 
1: Meat 
2: Dairy Products 
.... 

Je voudrais Définir une relation ManyToOne de l'entité product à l'entité ProductCategory.

Est-ce possible? Et, comment "interroger" les catégories? (disons que je veux lister toutes les catégories qui commencent par une certaine lettre)

'Pourquoi' demandez-vous? Comme je l'ai dit, je n'ai que très peu de catégories, mais peut-être un jour je veux en ajouter d'autres, et même avoir un éditeur CRUD pour eux et ainsi de suite, alors je pourrais facilement le convertir en entité de doctrine complète .

Ou d'autres suggestions sur la façon d'aborder cela?

Répondre

2

Il existe déjà une bibliothèque qui fournit ce que vous cherchez ce qu'on appelle Alice:

De cette façon, vous pouvez créer des données de test aléatoires en masse et peuvent encore travailler avec Doctrine comme d'habitude.

Si vous voulez faire cela manuellement, il sera difficile de résoudre le problème de la connexion des entités. Votre meilleur pari est de les garder tous dans des tableaux avec des id étant utilisés comme des clés, mais même alors, vous finirez probablement par écrire beaucoup de code de colle pour connecter les entités.

+0

Cela ressemble à beaucoup d'efforts et de frais généraux. Je pensais qu'il y avait un moyen plus facile. Je pense que je vais aller avec une entité de doctrine standard. Mais MERCI pour votre réponse! – minychillo

+0

Une autre possibilité serait d'utiliser le Doctrine FixturesBundle: https://github.com/doctrine/DoctrineFixturesBundle Il vous faudra configurer des entités mais cela pourrait être un peu plus pratique que de faire toute la configuration vous-même. Vous pouvez trouver quelques exemples dans les docs: https://symfony.com/doc/current/bundles/DoctrineFixturesBundle/index.html – dbrumann

+0

Je ne suis pas sûr de comprendre cette idée de luminaire ... d'abord, les luminaires ne sont destinés qu'aux tests , droite ? Deuxièmement, les appareils ont toujours besoin d'une table dans la base de données, donc pas de gain ici. Ou est-ce que je manque quelque chose? – minychillo