|
|
|
@ -1310,12 +1310,12 @@ $customers = Customer::find()->with([
|
|
|
|
|
アクティブレコードのインスタンスにクエリ結果からデータが投入されるときは、受け取ったデータセットのカラムの値が対応する属性に入れられます。 |
|
|
|
|
|
|
|
|
|
クエリ結果から追加のカラムや値を取得して、アクティブレコードの内部に格納することが出来ます。 |
|
|
|
|
例えば、ホテルの客室の情報を含む 'room' という名前のテーブルがあるとしましょう。 |
|
|
|
|
そして、全ての客室のデータは 'length' (長さ)、'width' (幅)、'height' (高さ) というフィールドを使って、部屋の幾何学的なサイズに関する情報を格納しているとします。 |
|
|
|
|
例えば、ホテルの客室の情報を含む `room` という名前のテーブルがあるとしましょう。 |
|
|
|
|
そして、全ての客室のデータは `length` (長さ)、`width` (幅)、`height` (高さ) というフィールドを使って、部屋の幾何学的なサイズに関する情報を格納しているとします。 |
|
|
|
|
空いている全ての部屋の一覧を容積の降順で取得する必要がある場合を考えて見てください。 |
|
|
|
|
レコードをその値で並べ替える必要があるので、PHP を使って容積を計算することは出来ません。 |
|
|
|
|
しかし、同時に、一覧には 'volume' (容積) も表示したいでしょう。 |
|
|
|
|
目的を達するためには、'Room' アクティブレコードクラスにおいて追加のフィールドを宣言し、'volume' の値を格納する必要があります。 |
|
|
|
|
しかし、同時に、一覧には `volume` (容積) も表示したいでしょう。 |
|
|
|
|
目的を達するためには、`Room` アクティブレコードクラスにおいて追加のフィールドを宣言し、`volume` の値を格納する必要があります。 |
|
|
|
|
|
|
|
|
|
```php |
|
|
|
|
class Room extends \yii\db\ActiveRecord |
|
|
|
@ -1332,7 +1332,7 @@ class Room extends \yii\db\ActiveRecord
|
|
|
|
|
$rooms = Room::find() |
|
|
|
|
->select([ |
|
|
|
|
'{{room}}.*', // 全てのカラムを選択 |
|
|
|
|
'([[length]] * [[width]].* [[height]]) AS volume', // 容積を計算 |
|
|
|
|
'([[length]] * [[width]] * [[height]]) AS volume', // 容積を計算 |
|
|
|
|
]) |
|
|
|
|
->orderBy('volume DESC') // 並べ替えを適用 |
|
|
|
|
->all(); |
|
|
|
@ -1344,7 +1344,7 @@ foreach ($rooms as $room) {
|
|
|
|
|
|
|
|
|
|
追加のフィールドが選択できることは、集計クエリに対して特に有効に機能します。 |
|
|
|
|
注文の数とともに顧客の一覧を表示する必要がある場合を想定してください。 |
|
|
|
|
まず初めに、`Customer` クラスの中で、'orders' リレーションと、注文数を格納するための追加のフィールドを宣言しなければなりません。 |
|
|
|
|
まず初めに、`Customer` クラスの中で、`orders` リレーションと、注文数を格納するための追加のフィールドを宣言しなければなりません。 |
|
|
|
|
|
|
|
|
|
```php |
|
|
|
|
class Customer extends \yii\db\ActiveRecord |
|
|
|
|