Objet de recherche
-
Les objets de recherche sont utilisées par Data_Link::count(), Data_Link::search(), Data_Link::searchOne(), Data_Link::select(), pour récupérer des objets respectant certains critères de recherche, présentés ici sous forme d’objet.
Les mêmes exemples sont repris pour les deux modes recherche par objet de recherche ou expression de recherche.
Voir aussi : Expression de recherche, Dao, Search_Object.
Expressions simples
Soit deux classes PHP représentatives des types de données qu’on peut utiliser :
use ITRocks\Framework\Dao; use ITRocks\Framework\Search_Object; class Man { /** * @var integer */ public $age; /** * @var string */ public $name; /** * @link Object * @var Town */ public $town; /** * @link Map * @var Town[] */ public $visited; } class Town { /** * @var string */ public $name; }
Voici différents exemples de recherches simples :
// Recherche d'un homme nommé Roger /** @var $search Man */ $search = Search_Object::create(Man::class); $search->name = 'Roger'; /** @var $man_named_roger Man */ $man_named_roger = Dao::searchOne($search); // Recherche des hommes qui ont 20 ans $search = Search_Object::create(Man::class); $search->age = 20; /** @var $men_being_20 Man[] */ $men_being_20 = Dao::search($search);
Recherche dans des objets contenus
// Recherche d'une ville nommée Rimont /** @var $search City */ $search = Search_Object::create(City::class); $search->name = 'Rimont'; /** @var $city_named_rimont City */ $city_named_rimont = Dao::searchOne($search); // Recherche des hommes habitant Rimont /** @var $search Man */ $search = Search_Object::create(Man::class); $search->town = $city_named_rimont; /** @var $men_living_in_rimont Man[] */ $men_living_in_rimont = Dao::search($search); // Recherche des hommes visitant Rimont $search = Search_Object::create(Man::class); $search->visited = [$city_named_rimont]; /** @var $men_visiting_rimont Man[] */ $men_visiting_rimont = Dao::search($search); // Les deux mêmes recherches, en une seule requête chaque // la première /** @var $search_city City */ $search_city = Search_Object::create(City::class); $search_city->name = 'Rimont'; /** @var $search Man */ $search = Search_Object::create(Man::class); $search->town = $search_city; /** @var $men_living_in_rimont Man[] */ $men_living_in_rimont = Dao::search($search); // la seconde (avec le même objet de recherche de ville) $search = Search_Object::create(Man::class); $search->visited = [$search_city]; /** @var $men_visiting_rimont Man[] */ $men_visiting_rimont = Dao::search($search);
Recherches multi-critères
Lorsque plusieurs critères sont donnés, seuls les objets répondant à tous les critères sont lus :
// Recherche d'un homme nommé Roger et qui a 30 ans /** @var $search Man */ $search = Search_Object::create(Man::class); $search->name = 'Roger'; $search->age = 30; /** @var $man_named_roger_being_30 Man */ $man_named_roger_being_30 = Dao::searchOne($search);
En recherche par objets, il n’est pas possible de mixer la plupart des relations entre critères de recherches type
OR
ouAND
. La relationAND
est systématiquement appliquée. Pour des critères de recherche plus souple, utiliser une expression de recherche.Vous pouvez toutefois affecter à vos propriétés des valeurs de classe Dao_Function, pour permettre de gérer certaines structures. Par exemple :
// Recherche des hommes nommés Marcel ou Roger, qui doivent tous avoir 20 ans use ITRocks\Framework\Dao\Func; /** @var $search Man */ $search = Search_Object::create(Man::class); $search->name = Func::orOp(['Marcel', 'Roger']); $search->age = 20; /** @var $men_named_roger_or_marcel_being_20 Man[] */ $men_named_roger_or_marcel_being_20 = Dao::search($search, Man::class);