3

このクエリとその結果を検討してください。

Yii::app()->db->createCommand(
    "SELECT name FROM users WHERE city='Paris'"
)->queryColumn();

結果:

Array
(
    [0] => John Kerry
    [1] => Marry White
    [2] => Mike Jain
)

このクエリを作成する方法に関する提案はありますActiveRecordか?配列を受け取る必要があります。

4

5 に答える 5

7

複製: Yii-アクティブレコードから値の配列を取得する方法

使用CHtml::listDatahttp://www.yiiframework.com/wiki/48/by-example-chtml/#hh3を参照)

$users = User::model()->findAll();
$usersArr = CHtml::listData( $users, 'id' , 'city');
print_r( $usersArr );

それはあなたに配列ID=>都市を与えるでしょう

Array {
    2 => 'Paris',
    102 => 'Riga',
    // ...
}
于 2012-08-14T13:30:12.780 に答える
1

アクティブレコードは、その名前で、データベースの各行のレコード全体を返すため、各行から1つのフィールドだけを取得する最良の方法は、上記のようなクエリビルダーを使用することです。

本当にARを使用したいが、名前を配列に入れたいだけの場合は、次のように機能する可能性があります。

$names = array();
$users = users::model()->findAllByAttributes(array('city'=>'Paris'));
foreach(array_keys($users) as $key)
{
    $names[] = $users[$key]->name;
}

AR検索から他の詳細を使用していない場合は、名前だけを取得するのはかなりのオーバーヘッドですが。

于 2012-08-14T10:42:00.307 に答える
1

実際、私は同じ問題に対処しました。CDBCommandの代わりにActiveRecordを使用したいと思います。私は以前に同様の質問に答えました

アクティブレコードから配列を取得

$words = Word::model()->findAll();
$data=array_map(create_function('$m','return $m->getAttributes();'),$words);
var_dump($data);
于 2013-07-27T08:26:48.417 に答える
0

すでに述べたように、findAllByAttributes(array $ attributes、mixed $ condition =''、array $ params = array())を使用し、一致するレコードの「name」列のみをフェッチするようにこのメソッドに指示することもできます。これを行うには、 CDbCriteriaのインスタンスを$ conditionとして渡し、このインスタンスに「select」列を指定する必要があります。

于 2012-08-14T11:06:28.317 に答える
0

これにChtmlを使用するのは醜いハックです!要するに、あなたはこれを行うことができます:

public function queryAll($condition = '', $params = array())
{
    $criteria = $this->getCommandBuilder()->createCriteria($condition, $params);
    $this->applyScopes($criteria);
    $command = $this->getCommandBuilder()->createFindCommand($this->getTableSchema(), $criteria);
    $results = $command->queryAll();
    return $results;
}

このリンクで、他の質問の同じ問題に対する私の答えに従ってください。

于 2013-12-12T14:47:56.010 に答える