21

settingsテーブルのモデルを作成するために、Doctrine2.1を使用しています。

id |  arg  |  value  |  category
1  |  name |  foo    |  general_settings 
2  |  desc |  bar    |  general_settings 

さまざまなカテゴリに多くの設定があるとします。特定のカテゴリのすべての設定を取得するには、次のようにします。

$q = Doctrine_Query::create()
    ->from('Setting p')
    ->where('p.category = ?', $category_name);

この時点ですべてが正常に機能します。さて..64,000ドルの質問は次のとおりです。以下のように結果を読み取ることができるデータアクセスの代替手段はありますか?

$resultSet = $q->execute(); 

//the magic here could be use the -arg- column as index
$requested_setting = $resulSet['name']  

//print the setting value
echo $requested_setting['value'];  //should prints "foo"

//another way
echo $resulSet['desc']['value']; //should prints "bar"
4

4 に答える 4

64

わかりました。ここでのコツは、INDEX BY単語を使用することです。

クエリ クラス

Query クラスをインポートします (必ずしもオプションではありません)。

use \Doctrine\ORM\Query;

クエリを作成します。

$query = $this->data->em->createQuery('
    SELECT s 
    FROM models\Setting s 
    INDEX BY s.arg //to set array custom key
    WHERE s.category = :category');
$query->setParameter('category', 'general');

読み取り専用配列を操作するためにハイドレーション モードを設定します

$settings = $query->getResult(Query::HYDRATE_ARRAY); 

値を表示します。

echo $settings['desc']['value'];  // prints "bar"

クエリビルダー

QueryBuilderオブジェクトを使用すると、ステートメントでインデックスを設定できますfrom

$qb = $em->createQueryBuilder();
$qb->select('s');
$qb->from('models\Settings', 's', 's.arg');  // here the magic
$result = $qb->getQuery()->getResult();

次に、次のようにオブジェクトにアクセスできます。

$description = $result['desc'];
$value = $description->getValue();
于 2012-08-23T18:05:02.833 に答える
1

Doctrine IndexBy 関数を使用して、列の値を配列インデックスとして表示します

$this
// database table alias
->createQueryBuilder( 'app_settings' )
// first parameter should be alias and second parameter will be column name, which you want to show as array index
->indexBy('app_settings','app_settings.name')
// get query
->getQuery()
// get doctrine result in array format
->getArrayResult();

言及されたクエリの結果は、次の形式になります: 言及されたクエリの結果

于 2019-06-26T11:53:29.673 に答える