Question

J'ai 2 tables dans ma base de données...

Entité
identifiant entier(11)
description varchar(50)
.....

Objets publics
....
modèle varchar(50) le modèle dont j'ai besoin (dans ce cas 'Entita')
modèle_id entier(11)

Je voudrais faire une requête comme celle-ci :
select entita.* from entita where NOT EXISTS (select * from publicobjects where publicobjects.model = 'Entita' and publicobjects.model_id = entita.id)

Comment puis-je faire cela avec les fonctions de modèle de Cakephp sans utiliser de requête personnalisée ?

Merci

Était-ce utile?

La solution

Je pense que vous essayez de trouver des lignes de la table Entita qui ne figurent pas dans la table Publicobjects.En supposant que cela soit correct, voici la requête SQL permettant à MySQL de le trouver :

SELECT `entita`.*
FROM `entita` 
LEFT JOIN `publicobjects` ON (`publicobjects`.`model` = 'entita' 
    AND `publicobjects`.`model_id` = `entita`.`id`)
WHERE `publicobjects`.`model_id` IS NULL

Pour que cela fonctionne avec les modèles de CakePHP, il faut quelques étapes.J'ai fait quelques hypothèses sur les noms de vos modèles, mais je peux me tromper et celles-ci sont faciles à corriger.

Ajoutez d’abord ceci au modèle Entita :

<?php
var $hasOne = array('Publicobject' => array(
    'foreignKey' => 'model_id',
    'conditions' => 'Publicobject.model = "Entita"'));

Maintenant, vous pouvez vérifier les entrées manquantes dans la table Publicobjects comme ceci :

<?php
$this->Entita->find('all', array('conditions' => array('Publicobject.model_id IS NULL')));
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top