Ver índice de contenidos del libro

6.1. El objeto Criteria de Propel

Uno de los requisitos presentados durante el segundo día decía que "cuando el usuario accede a la portada de Jobeet, ve la lista de ofertas de trabajo activas".

Sin embargo, ahora mismo se muestran todas las ofertas de trabajo, estén activas o no:

// apps/frontend/modules/job/actions/actions.class.php
class jobActions extends sfActions
{
  public function executeIndex(sfWebRequest $request)
  {
    $this->jobeet_job_list = JobeetJobPeer::doSelect(new Criteria());
  }
 
  // ...
}

Una oferta de trabajo activa es aquella que se publicó hace menos de 30 días. El método doSelect() toma como argumento un objeto de tipo Criteria que describe la consulta que se va a realizar a la base de datos. El código del ejemplo anterior utiliza un objeto Criteria vacío, lo que significa que se obtienen todos los registros de la base de datos.

Si queremos obtener sólo las ofertas de trabajo activas, tenemos que reemplazar el código anterior por lo siguiente:

public function executeIndex(sfWebRequest $request)
{
  $criteria = new Criteria();
  $criteria->add(JobeetJobPeer::CREATED_AT, time() - 86400 * 30, Criteria::GREATER_THAN);
 
  $this->jobeet_job_list = JobeetJobPeer::doSelect($criteria);
}

El método Criteria::add() añade una condición WHERE a la sentencia SQL generada. De esta forma podemos limitar el objeto Criteria para que sólo seleccione las ofertas de trabajo que se han publicado en los últimos 30 días. El método add() permite el uso de muchos operadores para realizar comparaciones, siendo los más utilizados los que se muestran a continuación:

  • Criteria::EQUAL
  • Criteria::NOT_EQUAL
  • Criteria::GREATER_THAN, Criteria::GREATER_EQUAL
  • Criteria::LESS_THAN, Criteria::LESS_EQUAL
  • Criteria::LIKE, Criteria::NOT_LIKE
  • Criteria::CUSTOM
  • Criteria::IN, Criteria::NOT_IN
  • Criteria::ISNULL, Criteria::ISNOTNULL
  • Criteria::CURRENT_DATE, Criteria::CURRENT_TIME, Criteria::CURRENT_TIMESTAMP