Alors je travaille sur un projet pour un agent immobilier. J'ai les tables d'objets / mysql suivants dans ma conception: Ce sont les relations entre les objets ci-dessus. P> Unit Object
(
[id]
[mls_number]
[type]
[retail_price]
[investor_price]
[quantity]
[beds]
[baths]
[square_feet]
[description]
[featured]
[year_built]
[has_garage]
[stories]
[other_features]
[investor_notes]
[tour_link]
[complex] => Complex Object
(
[id]
[name]
[description]
etc.
)
[agent] => Agent Object
(
[id]
[first_name]
[last_name]
[email]
[phone]
[phone2]
etc.
)
[pictures] => Array
(
[1] => Picture Object
(
)
)
[links] => Array
(
[1] => Link Object
(
)
)
[documents] => Array
(
[1] => Document Object
(
)
)
)
5 Réponses :
Le point de ORM n'est pas de charger des objets entiers à chaque fois. Le but est de le rendre facile et transparent pour votre application pour accéder à l'objet. P>
Cela étant dit, si vous avez besoin de l'objet de l'unité, chargez l'objet de l'unité et uniquement l'objet de l'unité. Si vous avez besoin de l'objet agent, puis chargez que lorsque vous en avez besoin, pas lorsque vous chargez l'objet de l'unité. P>
Le plus gros problème est que pour la section Administration, ces pièces sont segmentées pour permettre une gestion granulaire. Mais sur le front-end, 1 page affichera un complexe, toutes les unités, toutes les unités, toutes les images, documents, événements et liens associés ainsi que l'agent attribué et les coordonnées ...
Étant donné que vous accédez à vos données via des colonnes indexées et en utilisant réellement tout cela, cela ne devrait pas être un problème. Ma réponse a été orientée vers la retrait de toutes les données car l'orèse le dit, au lieu de cela, car il sera utilisé.
Si j'indègre correctement toutes mes tables, est-ce vraiment une mauvaise idée d'exécuter 3-5 requêtes supplémentaires pour chaque complexe / unité? P> blockQuote>
En bref, non. Pour chacune des tables correspondantes, vous devez probablement exécuter une requête distincte. C'est ce que la plupart des systèmes ORM (cartographie / modélisation d'objet / modélisation) feraient. P>
Si la performance est vraiment un problème (et, en fonction de ce que vous avez dit, cela ne sera pas) alors vous pourriez envisager de mettre en cache les résultats à l'aide de quelque chose comme APC, MemCache ou XCACHACHE. P>
Peut-être que vous devriez penser à briser cela.
Lorsque vous initiez votre objet, obtenez uniquement les détails dont vous avez besoin pour cet objet pour fonctionner. Si et quand vous avez besoin de plus de détails, alors allez les obtenir. Vous distribuez votre charge et votre traitement de cette façon: l'objet obtient uniquement la charge et le traitement doit fonctionner à fonctionner et, lorsque plus de besoin, il le reçoit alors. P>
Donc, dans votre exemple - créez le complexe en premier . Lorsque vous devez accéder à une unité, créez cette unité lorsque vous avez besoin de l'agent, puis obtenez cet agent, etc. P>
$complexDetails = array('id' => $id, etc);
$complexUnits = array();
.........
$complexUnits[] = new unit();
.........
$complexDetails['agent'] = new Agent();
Je devais résoudre ce problème au moment où j'ai concocté mon propre cadre MVC comme une expérience. Pour limiter les couches de données chargées de la DB, j'ai passé un entier au constructeur. Chaque constructeur décrémenterait cet entier avant de le transmettre aux constructeurs des objets qu'elle a instanciées. Quand il est arrivé à 0, aucun autre sous-objets ne serait instancié. Cela signifiait fondamentalement, l'INT passait était le nombre de couches chargées.
Donc, si je voulais seulement un attribut de l'objet unité, je ferais ceci: p>
Si vous souhaitez "stocker" les objets, ce qui signifie que vous les cache, ne les chargez pas dans un tableau PHP et de le sérialiser. Ensuite, vous pouvez le stocker à la base de données, dans MemCache ou partout ailleurs. Joindre une étiquette à ce poste vous permettrait de la récupérer et d'inclure un horodatage pour que vous sachiez quel âge il soit (c'est-à-dire qu'il doit être rafraîchi). P>
Si les données ne changent pas ou changent rarement, il n'y a vraiment aucune raison d'exécuter plusieurs requêtes complexes à chaque fois. Ceux simples, comme obtenir un primaire, vous pourriez aussi bien simplement frapper la base de données directement. P>
Je ne veux pas stocker les objets, je ne pense pas. Ce que j'essaie de comprendre est simplement comment charger efficacement les informations dans la base de données dans PHP.