yii поиск по активным записям - PullRequest
2 голосов
/ 16 декабря 2011

У меня есть это

$reviewModel=Review::model()->findAll();

Теперь я хочу выполнить операцию поиска в $ reviewModel, скажем, я хочу найти, если пользователь с идентификатором 1 опубликовал отзыв или нет.так же есть какая-либо функция, предоставляемая yii.

Примечание: я не хочу использовать $ reviewModel = Review :: model () -> findAll (array ('condition' => ''));Как мне нужны все отзывы, а затем выполнить поиск.

Ответы [ 3 ]

0 голосов
/ 17 декабря 2011

Не то, что я знаю (если я правильно понимаю ваш вопрос). Yii предоставляет различные способы запрашивать то, что вы хотите, из БД, но не из массива активных моделей записей в памяти.

Если вы хотите сделать это таким образом, то получите массив данных, как вы уже сделали, и затем используйте PHP для перебора массива моделей в поисках того, что вы хотите.

0 голосов
/ 20 декабря 2011

Вы можете отфильтровать их вручную.Например:

$reviewModel=Review::model()->findAll();

$matched = false;
foreach($reviewModel as $r)   //cycle through each review
{
    if($r->user == 1)         //check if user is desired
    {
        $matched = true;  //set matched as true
        break;        //stop searching, as we already found one
    }
}

, если вы хотите найти несколько вещей, вы можете использовать массив для сопоставления, а затем проверить этот массив.

$reviewModel=Review::model()->findAll();

$wanted = array(0=>false,3=>false,6=>false,8=>false);

foreach($reviewModel as $r) //cycle through each review
{
    if(isset($wanted[$r->user]) and !$wanted[$r->user]) //check if user is in wanted list and still false
    {
        $wanted[$r->user] == true; //set appropiate user to true
    }
}
0 голосов
/ 16 декабря 2011

Это то, что я бы порекомендовал, и это хорошая практика проектирования, также это позволит оптимально работать с вашей базой данных, + уменьшить количество запросов. Я бы сделал ваши отзывы связанными с пользователем. Как пользователь будет публиковать множество отзывов. так что отзывы пользователей HAS_MANY. и обзор и HAS_ONE пользователя. поэтому используйте его и создайте внешний ключ для построения отношений.

Так внутри вашей модели пользователя (Relations) id есть что-то вроде этого:

'reviews' => array(self::HAS_MANY, 'Review', 'originator),

теперь внутри вашего идентификатора модели обзора есть что-то вроде этого:

'user' => array(self::BELONGS_TO, 'User', 'originator'),

Как только вы это сделаете, все, что вам нужно будет сделать, - это просмотреть все отзывы пользователей. Если он нулевой, у них нет отзывов.

$user = User::model()->findbyPk(1);

и user-> reviews будут содержать все отзывы для этого пользователя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...