Supposons que j'ai 2 table identique ayant la même structure (appelez-le 'Tablea' & 'Tableb').
Je souhaite enregistrer certaines données sur la table 'A' et certaines données sur la table 'B'. P >
Maintenant, je veux utiliser le même modèle pour la table. P>
Je veux modifier la table liée au modèle (dites "ModelM") pour modifier de manière dynamique en fonction de la condition du contrôleur. p>
EG P>
Suivant est la copie / la pâte du code que je travaille sur: p> Malheureusement cela Ne fonctionne pas ... p> p>
3 Réponses :
J'ai initialement défini pour comprendre une solution à votre problème, mais plus je pense à cela, je pense que votre logique est défectueuse.
Je peux voir comment le fait que les tables sont similaires ou identiques peuvent vous amener à la décision d'utiliser un seul modèle à interagir avec les deux tables. Cependant, lorsque vous regardez un modèle censé être (dans CakePHP fondamentalement une interface à une table), il n'a pas de sens de passer d'avant en arrière. P>
Les Documents CakePHP expliquent des modèles comme Ceci: P>
Dans la programmation orientée objet Un modèle de données est un objet qui représente une "chose", comme une voiture, une personne ou une maison. p> BlockQuote>
Dans votre exemple, vous avez vraiment deux "choses" distinctes qui ressemblent exactement à la même chose. Par conséquent, ils devraient avoir leurs propres modèles. P>
Si vos modèles sont
vraiment forts> vont avoir exactement les mêmes méthodes, alors "The CakePHP Way" serait de définir une coutume comportement qui encapsule vos méthodes partagées. Ensuite, attachez le comportement aux deux modèles. P> Ensuite, vous pouvez charger le modèle dont vous avez besoin dans la condition du contrôleur: p>
xxx pré> p>
Mon problème était un peu différent, je viens de l'expliquer en donnant un exemple ... Je souhaite créer une table aléatoire de manière dynamique (réplique exacte d'une table existante), apportez un calcul complexe (AVG_PRICE), puis copiez la table existante dans cette nouvelle table. Avec l'ajout de 1 nouvelle colonne à elle dire "avg_price" ... maintenant, je veux maintenant paginer cette table créée de manière dynamique à l'aide d'un "commander par" au champ "avg_price" ... après la pagination, je déposerais la table ... .
Donc, chaque fois que j'exécute le script, une table serait créée-> Calculs-> Copier l'ancienne table avec un champ calculé sur la nouvelle table-> Paginate de la nouvelle table et définissez les données à afficher-> Drop the Table ....
Pouvons-nous créer une table temporaire à la volée et assigner le modèle ??
Je ne comprends pas le besoin. Pourquoi copiez-vous la table? Pourquoi ne pas simplement calculer la moyenne sans toutes les étapes supplémentaires?
Cake 1.2 n'a pas de concept de champ virtuel, j'ai donc dû calculer cela et stocker dans une nouvelle table, gardant à l'esprit que AVG_Price est variable par enregistrement en fonction des conditions de recherche ... Veuillez vous reporter à Stackoverflow.com/Questtions/4733112/... .. en mots simples je veux Pour paginer une réplique de table existante (avoir 1 extra-champ, avg_price) dans le gâteau 1.2 Quel concept de type «virtuel_field».
Après avoir ajouté un champ avg_price, mon exigence est de "commander" dans la fonction de paginate .... En mots simples, je veux paginer et commander par un champ virtuel (non concret) dans CakePHP ... et la valeur du virtuel Le champ pour un enregistrement particulier varie de temps à autre !!! J'espère que tu as mon point !!! :(
Je me serais recommandé de passer à CakePHP1.3 et d'utiliser des champs virtuels. Le processus de mise à niveau n'est pas si douloureux, je l'ai fait. book.cakephp.org/view/ 1561 / Migration-de-CakePHP-1-2-à-1-3
La situation est délicate, car Stephen le décrit, car votre approche viole quelque peu les conventions MVC. p>
Cependant, si vous êtes prêt à aller au côté obscur de hacks personnalisés, vous pouvez envisager de créer votre propre source de données personnalisée dans CakephP qui gère ce type de logique pour vous. Une option consiste à étendre une source de données donnée (probablement la MySQL One) avec votre propre logique personnalisée qui vise à effectuer un filtrage / conditionnement prélimaire avant d'interagir avec la base de données. Pas si propre parce que la logique est placée dans la mauvaise portée, mais pourrait fonctionner. Regardez ici pour un départ: http://book.cakephp.org/view/1075/dataSources p>
Alternativement, vous pouvez créer deux modèles différents et les faire partager la même logique à l'aide d'un comportement. Ce peu vous limite à prendre le choix du modèle plus tôt dans le flux (et n'affecte donc pas seulement l'emplacement du stockage de données), mais pourrait être une possibilité. P>
Une source de données serait intéressante, mais sombre en effet!
Faites ceci sur vos contrôleurs avant la fonction de filtrage: P>
$ ceci-> CakePHPModelName-> Setsource ('Nom de table'); P>
Cela utilisera une table différente. P>
Source: http: //www.mentalydesign. Com / Blog / Vue / Changement-CakePHPS-Model-usetable-On-Fly P>