Создание и сопровождение сайтов

Блог. Yii. Подсказки по Yii. Глава двенадцатая.

Поиск

Подсказки по Yii. Глава двенадцатая.

Основы работы с БД на примере Open Real Estate.

  1. findByPk.

    1. $id = 25;     
    2. $result = Apartment::model()->findByPk($id);  
    3. echo $result->title_ru;  

    Результат:

    Однокомнатная квартира на Новом Арбате

     

  2. findAllByPk.

    1. $ids = array(25, 26, 27);     
    2. $result = Apartment::model()->findAllByPk($ids);  
    3.   
    4. foreach ($result as $item) {  
    5.     echo '<pre>';  
    6.     print_r($item->title_ru);  
    7.     echo '</pre>';  
    8. }  

    Результат:

    Однокомнатная квартира на Новом Арбате

    Квартира, ул. Большая Полянка, д. 28

    2 комн. кв. рядом с м. Проспект Мира

     

  3. findByAttributes.

    1. $result = Apartment::model()->findByAttributes(array('title_ru' => 'Однокомнатная квартира на Новом Арбате'));  
    2.               
    3. echo $result->title_ru;  
    4. echo '<br>'.$result->id;  

    Результат:

    Однокомнатная квартира на Новом Арбате

    25

     

  4. findAllByAttributes.

    1. $result = Apartment::model()->findAllByAttributes(array('title_ru' => array('Однокомнатная квартира на Новом Арбате''дом на ул. Трубецкая')));  
    2.           
    3. foreach ($result as $item) {  
    4.     echo '<pre>';  
    5.     print_r($item->title_ru);  
    6.     print_r('<br>'.$item->id);  
    7.     echo '</pre>';  
    8. }  

    Результат:

    дом на ул. Трубецкая

    19

    Однокомнатная квартира на Новом Арбате

    25

    ещё пример:

    1. $result = Apartment::model()->findAllByAttributes(array('id' => array(19, 20), 'title_ru' => array('Однокомнатная квартира на Новом Арбате''дом на ул. Трубецкая')));  
    2.           
    3. foreach ($result as $item) {  
    4.     echo '<pre>';  
    5.     print_r($item->title_ru);  
    6.     print_r('<br>'.$item->id);  
    7.     echo '</pre>';  
    8. }  

    Результатом такого использования будет::

    дом на ул. Трубецкая

    19

     

  5. find.

    1. $numMax = 19;     
    2. $result = Apartment::model()->find('id < :numMax'array(':numMax' => $numMax));  
    3.   
    4. echo $result->title_ru;  
    5. echo '<br>'.$result->id;  

    квартира на ул. Авиамоторная

    18

     

  6. findAll.

    1. $numMax = 20;     
    2. $result = Apartment::model()->findAll('id < :numMax'array(':numMax' => $numMax));  
    3.       
    4. foreach ($result as $item) {  
    5.     echo '<pre>';  
    6.     print_r($item->title_ru);  
    7.     print_r('<br>'.$item->id);  
    8.     echo '</pre>';  
    9. }  

    или можно так:

    1. $numMax = 20;     
    2. $result = Apartment::model()->findAll("id < {$numMax}");  
    3.       
    4. foreach ($result as $item) {  
    5.     echo '<pre>';  
    6.     print_r($item->title_ru);  
    7.     print_r('<br>'.$item->id);  
    8.     echo '</pre>';  
    9. }  

    Результат:

    квартира на ул. Авиамоторная

    18

    дом на ул. Трубецкая

    19

    Также можно выбрать все элементы, отсортированные по заголовку:

    1. $result = Apartment::model()->findAll(array('order' => 'title_ru ASC'));  

     

  7. findBySql.

    1. $result = Apartment::model()->findBySql('SELECT id FROM {{apartment}} WHERE square = 60 AND title_ru = "квартира на ул. Авиамоторная"');      
    2. echo $result->id;  

    Результат:

    18

     

  8. findAllBySql.

    1. $result = Apartment::model()->findAllBySql('SELECT id, title_ru FROM {{apartment}} WHERE square <= 50 AND square >= 40');  
    2.               
    3. foreach ($result as $item) {  
    4.     echo '<pre>';  
    5.     print_r($item->title_ru);  
    6.     print_r('<br>'.$item->id);  
    7.     echo '</pre>';  
    8. }  

    Результат:

    Однокомнатная квартира Псковская улица

    21

    Однокомнатная квартира на Новом Арбате

    25

     

  9. countBySql.

    1. $result = Apartment::model()->countBySql('SELECT COUNT(id) FROM {{apartment}} WHERE square <= 50 AND square >= 40');  
    2. echo $result;  

    Результат:

    2

     

  10. count.

    1. $result = Apartment::model()->count('id < 25');  
    2. echo $result;  

    или:

    1. $result = Apartment::model()->count('id < :num'array(':num' => 25));  
    2. echo $result;  

    Результат:

    7

     

  11. exists.

    1. $result = Apartment::model()->exists('id < :num'array(':num' => 25));  
    2. echo var_dump($result);  

    Результат:

    bool(true)

    1. $result = Apartment::model()->exists('id < :num'array(':num' => 1));  
    2. echo var_dump($result);  

    Результат:

    bool(false)

     

  12. UpdateByPK.

    1. $ids = array(18, 19, 20);     
    2. $result = Apartment::model()->updateByPk($idsarray('title_ru' => 'Новый заголовок'));   

    Результат:

    Возвращает true или false. При успешном выполнении для объявлений с ID равным 18, 19 и 20 значение поля title_ru в таблице выставлено в "Новый заголовок".

     

  13. updateAll.

    1. $result = Apartment::model()->updateAll(array('title_ru' => 'Новый заголовок'), 'title_ru = :title'array(':title' => 'квартира на ул. Авиамоторная'));  

    Результат:

    Возвращает true или false. При успешном выполнении для объявлений с полем title_ru, имеющим значение "квартира на ул. Авиамоторная", будет выставлено новое значение "Новый заголовок".

     

  14. deleteByPk.

    1. $result = Apartment::model()->deleteByPk(18);  

    Результат:

    Возвращает true или false. При успешном выполнении будет удалено объявление с ID равным 18.

     

  15. deleteAll.

    1. $result = Apartment::model()->deleteAll('title_ru = :title'array(':title' => 'дом на ул. Трубецкая'));  

    Результат:

    Возвращает true или false. При успешном выполнении будет удалено объявление со значением поля title_ru равным "дом на ул. Трубецкая".

     

Обсудить статью на форуме