Как применить Criteria :: LIMIT для верхнего и нижнего или есть другой способ? - PullRequest
0 голосов
/ 08 сентября 2011

у меня есть этот код в indexSucces.php

    //some html for the main page
    <td width='48%' align='right'> 
       <?php include_partial('login', array('form' => $form)) ?>
    </td>

в файле actions.class.php для индекса, который у меня есть:

    public function executeIndex()
    {
    $this->form = new RcLoginForm();
    $this->setTemplate('index');
    $this->search_form = new RcSearchForm();
        $this->age_form = new RcAgeTableForm();
    }

    public function executeListmatches(sfWebRequest $request)
    {

    }   

затем частичный код _login.php:

   <form action="<?php echo url_for('password/listmatches' ) ?>"  method="post" >
   <tr>
    <td colspan="2">
        <span class='spn_med_lightblue_rbc'>I am a:</span>  
        <select id="gender1" name="gender1">
            <option value="male1" >Male</option>
            <option value="female1" selected="selected">Female</option>
        </select>  
    </td>
  </tr>
  <tr>
    <td colspan="2">
        <span class='spn_med_lightblue_rbc'>Seeking a:</span>  
        <select id="gender2" name="gender2">
            <option value="male2" >Male</option>
            <option value="female2" selected="selected">Female</option>
        </select>  
    </td>
  </tr>
  <tr>
    <td>
        <span class='spn_med_lightblue_rbc'>Age:</span>  
        <select id="age1" name="age1">
        <?php $ages = RcAgeTablePeer::getById(18); 
            foreach ($ages as $age)
            { 
                //echo $age->getId();
                echo "<option>";
                echo $age->getId();
                echo "</option>";
            }  ?>
        </select>
    </td>
    <td>
        <span class='spn_med_lightblue_rbc'>To:</span>  
        <select id="age2" name="age2">
            <?php foreach ($ages as $age)
            { 
                //echo $age->getId();
                echo "<option>";
                echo $age->getId();
                echo "</option>";
            }  ?>
        </select>  
    </td>
  </tr>
  <tr> 
    <td colspan="2">
        <span class='spn_med_lightblue_rbc'>Location:</span>  
        <select id="province" name="province">
            <option value="all" selected="selected">All</option>
            <option value="ec">Eastern Cape</option>
            <option value="nc">Northern Cape</option>
            <option value="wc">Western Cape</option>
            <option value="fs">Free State</option>
            <option value="gp">Gauteng</option>  
            <option value="kzn">Kzn</option>
            <option value="lim">Limpopo</option>
            <option value="mpu">Mpumulanga</option>  
            <option value="nw">North West</option>  
        </select>  
    </td>  
    <td><input class='submit_img' type="image" src="/images/rainbow/gobuttonbluesmall.png" value="Submit" alt="Submit"></td>
</tr>
<tr></tr>
<tr></tr>
</form>

выше будет домашняя страница с разделом (частично _login), который содержит логин для входа на сайт, а также быстрый поиск, когда вы нажмете кнопку «Перейти», действие формы перейдет к действие =»

это моя дилемма .. я не в каком-либо классе, я просто передаю выбранные значения через POST и использую эти значения для получения моих строк

в listmatchesSuccess.php

   $matching_rows = RcProfileTablePeer::getAllBySelection($gender_id2,$age1,$age2,$province_id,$from,$limit);

где выше в RcProfileTablePeer.php:

 static public function getAllBySelection($gender2,$age1,$age2,$province_id,$from,$limit)
{
    $criteria = new Criteria();
    $criteria->add(RcProfileTablePeer::AGE,$age1,Criteria::GREATER_EQUAL);
    $criteria->add(RcProfileTablePeer::AGE,$age2,Criteria::LESS_EQUAL);
    $criteria->add(RcProfileTablePeer::GENDER_ID,$gender2, Criteria::EQUAL);
    if ($province_id <> 10)
        $criteria->addAnd(RcProfileTablePeer::PROVINCE_ID,$province_id, Criteria::EQUAL);
    $criteria->setLimit($limit);
    return self::doSelect($criteria);
}

надеюсь, теперь все это имеет смысл :) спасибо

Ответы [ 2 ]

1 голос
/ 08 сентября 2011

Надеюсь, я понимаю, о чем вы спрашиваете,

Если вы хотите добавить ограничение к вашему запросу

$criteria->setLimit(10);

а также, если вы хотите создать пейджер в Symfony, я бы предложил класс propel pager например $ this-> page = $ request-> getParameter ('page', 1); $ c = новые критерии ();

$c->add(UserPeer::Status_ID,1);

$this->pager = new sfPropelPager('User', $limit);
$this->pager->setCriteria($c));
$this->pager->setPeerMethod('doSelect');
$this->pager->setPage($this->page);
$this->pager->init(); 

Вы можете обратиться по этой ссылке http://www.symfony -project.org / cookbook / 1_0 / en / pager для получения дополнительной информации.

Надеюсь, это ответит на ваш вопрос;

0 голосов
/ 09 сентября 2011

В вашем запросе есть ошибка:

$criteria->add(RcProfileTablePeer::AGE,$age1,Criteria::GREATER_EQUAL);
$criteria->add(RcProfileTablePeer::AGE,$age2,Criteria::LESS_EQUAL);

Результирующий запрос : rc_profile.age >= :age1.

Если вы ищете объекты с возрастом от $age1 и $ age2, это должно помочь:

$criteria->add(RcProfileTablePeer::AGE,$age1,Criteria::GREATER_EQUAL);
$criteria->addAnd(RcProfileTablePeer::AGE,$age2,Criteria::LESS_EQUAL);

Результирующий запрос : rc_profile.age >= :age1 AND rc_profile.age <= :age2

Обратите внимание, что вы должны использовать $criteria->addAnd или $criteria->addOrсовместить условия для одной и той же колонны.

...