logo

パレット - カラフルに🎨

Palette — ビジュアルページビルダー、デザインの専門知識は不要です。

ライブデモ パレットをダウンロード

Scroll
08/05/2020, by maria

フィールドを追加

SELECTクエリにフィールドを追加するには、addField()メソッドを使用します:

$title_field = $query->addField('n', 'title', 'my_title');

上記のコードは、クエリにエイリアス「n」を持つテーブルの「title」フィールドを選択し、「my_title」というエイリアスを割り当てるよう指示します。エイリアスが指定されていない場合は、自動的に作成されます。圧倒的多数の場合、生成されるエイリアスは単なるフィールド名です。この例では「title」になります。このエイリアスが既に存在する場合は、エイリアスはテーブル名とフィールド名になります。この例では「n_title」になります。このエイリアスも既に存在する場合は、未使用のエイリアスが見つかるまで(「n_title_2」など)エイリアスにカウンターが追加されます。

自分でクエリを作成して入力し、エイリアスを指定せず、デフォルトのエイリアスが利用できない場合、コードにほぼ間違いなくバグがあります。ただし、hook_query_alter()の実装を書いている場合は、どのエイリアスが既に使用されているかを正確に知ることはできないため、常に生成されたエイリアスを使用する必要があります。

複数のフィールドを追加

複数のフィールドを選択するには、必要な順序でaddField()を複数回呼び出します。ほとんどの場合、フィールドの順序は重要ではないはずであり、重要である場合は、モジュールのビジネスロジックに欠陥がある可能性が高いことに注意してください。

あるいは、fields()メソッドを使用して、複数のフィールドを一度に追加することもできます。

$query->fields('n', ['nid', 'title', 'created', 'uid']);

上記のメソッドは、各フィールドに対してaddField()を4回呼び出すことと同等です。ただし、fields()はフィールドのエイリアスの指定をサポートしていません。また、生成されたエイリアスを返すのではなく、クエリオブジェクト自体を返すため、メソッドをチェーンできます。生成されたエイリアスを知る必要がある場合は、addField()を使用するか、getFields()で内部フィールドの生の構造にアクセスします。

フィールドリストなしでfields()を呼び出すと、「SELECT*」クエリになります。

$query->fields('n');

これにより、「n.*」がクエリのフィールドリストに含まれます。エイリアスは作成されないことに注意してください。SELECT*を使用するテーブルに、別のテーブルから直接指定されたフィールドと同じフィールドが含まれている場合、結果セットでフィールド名の衝突が発生する可能性があります。その場合、結果セットには共通の名前を持つフィールドの1つだけが含まれます。このため、SELECT*の使用は推奨されません。

fetchFieldを使用して1つのフィールドのみを返す

fetchFieldメソッドを使用して、次のようなクエリで1つのフィールドのみを返します。(少し馬鹿げた例)

$query = $connection->select('node', 'n');
$query->condition('n.nid', 123);
$query->addField('n', 'title');
$result = $query->execute();
return $result->fetchField();