mirror of
https://github.com/yiisoft/yii2.git
synced 2025-08-13 22:06:51 +08:00
docs/guide-ja updated [ci skip]
This commit is contained in:
@ -237,6 +237,20 @@ $result = Customer::getDb()->cache(function ($db) {
|
||||
どちらのクエリキャッシュメカニズムも選べますが、前述した Yii のクエリキャッシュにはキャッシュの依存を柔軟に指定できるという利点があり、潜在的にはより効率的でしょう。
|
||||
|
||||
|
||||
### キャッシュのフラッシュ <span id="cache-flushing">
|
||||
|
||||
保存されている全てのキャッシュデータを無効化する必要がある場合は、[[yii\caching\Cache::flush()]] を呼ぶことが出来ます。
|
||||
|
||||
コンソールから `yii cache/flush` を呼ぶことによっても、キャッシュをフラッシュすることが出来ます。
|
||||
- `yii cache`: アプリケーションで利用可能なキャッシュのリストを表示します。
|
||||
- `yii cache/flush cache1 cache2`: キャッシュコンポーネント `cache1` と `cache2` をフラッシュします
|
||||
(複数のコンポーネント名をスペースで区切って渡すことが出来ます)
|
||||
- `yii cache/flush-all`: アプリケーションの全てのキャッシュコンポーネントをフラッシュします。
|
||||
|
||||
> Info|情報: デフォルトでは、コンソールアプリケーションは独立した構成情報ファイルを使用します。
|
||||
正しい結果を得るためには、ウェブとコンソールのアプリケーション構成で同じキャッシュコンポーネントを使用していることを確認してください。
|
||||
|
||||
|
||||
### 構成 <span id="query-caching-configs"></span>
|
||||
|
||||
クエリキャッシュには [[yii\db\Connection]] を通して設定可能な三つのグローバルなオプションがあります:
|
||||
|
@ -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']);
|
||||
}
|
||||
}
|
||||
```
|
||||
|
@ -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
|
||||
|
||||
|
Reference in New Issue
Block a user