2013-08-03 2 views
1

я работаю в Yii, и у меня есть таблица с именем: посещениене в состоянии получить различные значения столбцов:

Она имеет два внешних ключей: from_user_id и to_user_id, которые связаны с таблицей «пользователя». Теперь визиты в таблицу имеют много одинаковых «from_user_id», и я хочу получить их в Yii как DISCTINCT.

Это мой код:

$visited = Visit::model()->findAllByAttributes(array('to_user_id'=>Yii::app()->user->id)); 

$criteria = new CDbCriteria(); 
$criteria->distinct = true; 

foreach($visited as $visits){ 

    echo User::model()->findByPk($visits->from_user_id,$criteria)->getFullName($visits->from_user_id); 

    echo " <br>"; 
} 

Однако, я не могу получить их в отличие.

Это мой выход:

san 
san 
san 
Leo 
Leo 

Я хочу, чтобы выход как:

San 
Leo 

Это не получает мне различные значения. Где я иду не так?

+1

Но какие еще столбцы возвращаются? 'print_r ($ посещения)' в цикле. Просто потому, что значение 'from_user_id' не является отдельным в этом запросе, не означает, что оно не является частью более крупного отдельного набора данных. –

+0

Я не достаточно знаком с рамкой Yii, чтобы узнать, что этот метод предназначен для получения _only_ одного столбца в запросе. –

+1

MichaelBerkowski правильно, вам нужно указать Yii, чтобы выбрать только столбец 'from_user_id'. Это делается с помощью '$ criteria-> select = 'from_user_id';' 2. Поскольку у вас есть внешние ключи, вы также должны иметь соответствующие отношения. Скажите Yii, чтобы он мог загрузить отношение, соответствующее внешнему ключу 'from_user_id', и получить все ваши данные в одном запросе вместо N + 1. – DCoder

ответ

1

Я не был в состоянии проверить это, но кроме возможной корректировки незначительного синтаксиса, это должно помочь вам:

$visited = Visit::model()->findAllByAttributes(
    array('to_user_id'=>Yii::app()->user->id), 
    array('distinct' => True) 
); 

Согласно документу, findAllByAttribute принять условие или критерии параметра как второй аргумент.

Если это массив (согласно документу для find()), он будет служить для инициализации различных запросов criteria properties.

+1

Это все еще делает 'SELECT DISTINCT * FROM посещениями WHERE to_user_id =: to_user_id'. – DCoder

+0

@DCoder: Именно! И спасибо вам, я смог это сделать ... Это пропало :) Спасибо! –

Смежные вопросы