Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment convertir cette instruction MySQL en symfony Propel ?

Propel n'a pas de norme façon de faire des sous-requêtes dans le cadre d'un critère.

Vous pouvez soit séparer votre requête (obtenir d'abord la valeur que vous souhaitez comparer, puis l'utiliser dans la requête d'origine) ou utiliser un CUSTOM critères avec votre sous-requête dans votre requête propel.

Voici un exemple de la deuxième option :

$c = new Criteria();

$subSelect = "cart.category > (
  SELECT cart.category
  FROM carts
  WHERE carts.id = 3)";

$c->add(CartPeer::CATEGORY, $subSelect, Criteria::CUSTOM);

MODIF : Voici un exemple de la première option

// find the object we want to compare against
$c = new Criteria();
$c->add(CartPeer::ID, 3); 
$cart = CartPeer::doSelectOne($c)

// then make the actual criteria
$c = new Criteria();
$c->add(CartPeer::CATEGORY, $cart->getCategory(), Criteria::GREATER_THAN)

Le seul problème avec cette option est que vous faites deux requêtes au lieu d'un, ce qui peut affecter vos performances, mais cela dépend bien sûr de votre application.