From 95e53b8e10010c6380e9b74a2ac07e624dcaec91 Mon Sep 17 00:00:00 2001 From: Nobuo Kihara Date: Sat, 14 Nov 2015 09:13:16 +0900 Subject: [PATCH] docs/guide-ja updated [ci skip] --- docs/guide-ja/caching-data.md | 14 ++++ docs/guide-ja/db-active-record.md | 79 +++++++++++++++++++++++ docs/guide-ja/tutorial-yii-integration.md | 2 +- 3 files changed, 94 insertions(+), 1 deletion(-) diff --git a/docs/guide-ja/caching-data.md b/docs/guide-ja/caching-data.md index c7728f297a..a02a9c1bfd 100644 --- a/docs/guide-ja/caching-data.md +++ b/docs/guide-ja/caching-data.md @@ -237,6 +237,20 @@ $result = Customer::getDb()->cache(function ($db) { どちらのクエリキャッシュメカニズムも選べますが、前述した Yii のクエリキャッシュにはキャッシュの依存を柔軟に指定できるという利点があり、潜在的にはより効率的でしょう。 +### キャッシュのフラッシュ + +保存されている全てのキャッシュデータを無効化する必要がある場合は、[[yii\caching\Cache::flush()]] を呼ぶことが出来ます。 + +コンソールから `yii cache/flush` を呼ぶことによっても、キャッシュをフラッシュすることが出来ます。 + - `yii cache`: アプリケーションで利用可能なキャッシュのリストを表示します。 + - `yii cache/flush cache1 cache2`: キャッシュコンポーネント `cache1` と `cache2` をフラッシュします +(複数のコンポーネント名をスペースで区切って渡すことが出来ます) + - `yii cache/flush-all`: アプリケーションの全てのキャッシュコンポーネントをフラッシュします。 + +> Info|情報: デフォルトでは、コンソールアプリケーションは独立した構成情報ファイルを使用します。 +正しい結果を得るためには、ウェブとコンソールのアプリケーション構成で同じキャッシュコンポーネントを使用していることを確認してください。 + + ### 構成 クエリキャッシュには [[yii\db\Connection]] を通して設定可能な三つのグローバルなオプションがあります: diff --git a/docs/guide-ja/db-active-record.md b/docs/guide-ja/db-active-record.md index 38e6035076..c636e3495c 100644 --- a/docs/guide-ja/db-active-record.md +++ b/docs/guide-ja/db-active-record.md @@ -1333,3 +1333,82 @@ $customers = Customer::find() ->groupBy('{{customer}}.id') // 結果をグループ化して、集計関数の動作を保証する ->all(); ``` + +この方法を使うことの短所の一つは、情報が SQL クエリでロードされていない場合には、それを別途計算しなければならない、ということです。 +このことは、また、新しく保存したレコードも追加のフィールドについては情報を持っていないことになることを意味します。 + +```php +$room = new Room(); +$room->length = 100; +$room->width = 50; +$room->height = 2; + +$room->volume; // まだ指定されていないため、この値は null になります。 +``` + +[[yii\db\BaseActiveRecord::__get()|__get()]] と [[yii\db\BaseActiveRecord::__set()|__set()]] のマジックメソッドを使用すれば、プロパティの動作をエミュレートすることが出来ます。 + +```php +class Room extends \yii\db\ActiveRecord +{ + private $_volume; + + public function setVolume($volume) + { + $this->_volume = (float) $volume; + } + + public function getVolume() + { + if (empty($this->length) || empty($this->width) || empty($this->height)) { + return null; + } + + if ($this->_volume === null) { + $this->setVolume( + $this->length * $this->width * $this->height + ); + } + + return $this->_volume; + } + + // ... +} +``` + +このようにすると、SELECT クエリによって容積が提供されていない場合に、モデルの他の属性を使って容積を自動的に計算することが出来ます。 + +この手法は、リレーショナルデータに依存する追加のフィールドに対しても、同じように使用する事が出来ます。 + +```php +class Customer extends \yii\db\ActiveRecord +{ + private $_ordersCount; + + public function setOrdersCount($count) + { + $this->_ordersCount = (int) $count; + } + + public function getOrdersCount() + { + if ($this->isNewRecord) { + return null; // プライマリキーが null の場合のリレーショナルクエリを防止 + } + + if ($this->_ordersCount === null) { + $this->setOrdersCount(count($this->orders)); + } + + return $this->_ordersCount; + } + + // ... + + public function getOrders() + { + return $this->hasMany(Order::className(), ['customer_id' => 'id']); + } +} +``` diff --git a/docs/guide-ja/tutorial-yii-integration.md b/docs/guide-ja/tutorial-yii-integration.md index c821dc3c0b..d3ab8c9a9c 100644 --- a/docs/guide-ja/tutorial-yii-integration.md +++ b/docs/guide-ja/tutorial-yii-integration.md @@ -77,7 +77,7 @@ Yii は数多くの優れた機能を提供していますので、サードパ サードパーティのシステムが Composer を使って依存を管理している場合は、単に下記のコマンドを実行すれば Yii をインストールすることが出来ます。 - composer global require "fxp/composer-asset-plugin:~1.0.3" + composer global require "fxp/composer-asset-plugin:~1.1.0" composer require yiisoft/yii2 composer install