From 92270bcd24461ac58d6baf84463d2a23236e0477 Mon Sep 17 00:00:00 2001 From: Nobuo Kihara Date: Sun, 8 Jan 2017 02:05:18 +0900 Subject: [PATCH] docs/guide-ja updated [skip ci] (#13342) * docs/guide-ja/caching-data.md updated * docs/guide-ja/caching-fragment.md updated * docs/guide-ja/concept-configurations.md updated * WIP * docs/guide-ja/concept-di-container.md updated * docs/guide-ja/db-active-record.md updating WIP * docs/guide-ja/db-active-record.md updated * docs/guide-ja updating (WIP) [skip ci] --- docs/guide-ja/db-dao.md | 25 ++++++++++-- docs/guide-ja/db-migrations.md | 68 +++++++++++++++++++++++++++++++ docs/guide-ja/db-query-builder.md | 8 +++- docs/guide-ja/helper-array.md | 6 +-- docs/guide-ja/helper-html.md | 2 +- 5 files changed, 100 insertions(+), 9 deletions(-) diff --git a/docs/guide-ja/db-dao.md b/docs/guide-ja/db-dao.md index 19c0ecacda..1b69959016 100644 --- a/docs/guide-ja/db-dao.md +++ b/docs/guide-ja/db-dao.md @@ -18,6 +18,8 @@ Yii は下記の DBMS のサポートを内蔵しています。 - [Oracle](http://www.oracle.com/us/products/database/overview/index.html) - [MSSQL](https://www.microsoft.com/en-us/sqlserver/default.aspx): バージョン 2008 以上。 +> Note: PHP 7 用の pdo_oci の新しいバージョンは、現在、ソースコードとしてのみ存在します。 + [コミュニティによる説明](https://github.com/yiisoft/yii2/issues/10975#issuecomment-248479268) に従って、コンパイルしてください。 ## DB 接続を作成する @@ -320,11 +322,11 @@ try { // ... その他の SQL 文を実行 ... $transaction->commit(); - } catch(\Exception $e) { - $transaction->rollBack(); - + throw $e; +} catch(\Throwable $e) { + $transaction->rollBack(); throw $e; } ``` @@ -337,6 +339,12 @@ try { が呼ばれて、トランザクションの中で失敗したクエリに先行するクエリによって行なわれた変更が、ロールバックされます。 そして、`throw $e` が、まるでそれをキャッチしなかったかのように、例外を再スローしますので、通常のエラー処理プロセスがその例外の面倒を見ることになります。 +> Note: 上記のコードでは、PHP 5.x と PHP 7.x との互換性のために、二つの +> catch ブロックを持っています。`\Exception` は PHP 7.0 以降では、 +> [`\Throwable` インターフェイス](http://php.net/manual/ja/class.throwable.php) を実装しています。 +> 従って、あなたのアプリケーションが PHP 7.0 以上しか使わない場合は、`\Exception` の部分を省略することが出来ます。 + + ### 分離レベルを指定する Yii は、トランザクションの [分離レベル] の設定もサポートしています。 @@ -408,12 +416,18 @@ try { } catch (\Exception $e) { $innerTransaction->rollBack(); throw $e; + } catch(\Throwable $e) { + $transaction->rollBack(); + throw $e; } $outerTransaction->commit(); } catch (\Exception $e) { $outerTransaction->rollBack(); throw $e; +} catch(\Throwable $e) { + $transaction->rollBack(); + throw $e; } ``` @@ -549,6 +563,9 @@ try { } catch(\Exception $e) { $transaction->rollBack(); throw $e; +} catch(\Throwable $e) { + $transaction->rollBack(); + throw $e; } ``` @@ -567,7 +584,7 @@ $rows = Yii::$app->db->useMaster(function ($db) { }); ``` -直接に `Yii::$app->db->enableSlaves` を false に設定して、全てのクエリをマスタ接続に向けることも出来ます。 +直接に `Yii::$app->db->enableSlaves` を `false` に設定して、全てのクエリをマスタ接続に向けることも出来ます。 ## データベーススキーマを扱う diff --git a/docs/guide-ja/db-migrations.md b/docs/guide-ja/db-migrations.md index a812a43d3b..230c276ea5 100644 --- a/docs/guide-ja/db-migrations.md +++ b/docs/guide-ja/db-migrations.md @@ -409,6 +409,11 @@ class m160328_040430_create_post_table extends Migration 上記の例で `author_id:integer:notNull:foreignKey(user)` は、`user` テーブルへの外部キーを持つ `author_id` という名前のカラムを生成します。 一方、`category_id:integer:defaultValue(1):foreignKey` は、`category` テーブルへの外部キーを持つ `category_id` というカラムを生成します。 +2.0.11 以降では、`foreignKey` キーワードは空白で区切られた第二のパラメータを取ることが出来ます。 +これは、生成される外部キーに関連づけられるカラム名を表します。 +第二のパラメータが渡されなかった場合は、カラム名はテーブルスキーマから取得されます。 +スキーマが存在しない場合や、プライマリキーが設定されていなかったり、複合キーであったりする場合は、デフォルト名として `id` が使用されます。 + ### テーブルを削除する @@ -590,6 +595,9 @@ class m160328_041642_create_junction_table_for_post_and_tag_tables extends Migra } ``` +2.0.11 以降では、中間テーブルの外部キーのカラム名はテーブルスキーマから取得されます。 +スキーマでテーブルが定義されていない場合や、プライマリキーが設定されていなかったり複合キーであったりする場合は、デフォルト名 `id` が使われます。 + ### トランザクションを使うマイグレーション @@ -861,6 +869,66 @@ return [ もう、`migrationTable` のコマンドラインオプションを使ってテーブルを指定する必要はなくなります。 +### 分離されたマイグレーション + +時として、異なる名前空間からマイグレーションを使用する必要が生じることがあります。 +それはあなた自身のプロジェクトの何らかのエクステンションであったりモジュールであったりします。 +そのようなものの一つの例は [RBAC コンポーネント](security-authorization.md#configuring-rbac) のためのマイグレーションです。 +バージョン 2.0.10 以降では、[[yii\console\controllers\MigrateController::migrationNamespaces|migrationNamespaces]] +を使ってこの課題を解決することが出来ます。 + +```php +return [ + 'controllerMap' => [ + 'migrate' => [ + 'class' => 'yii\console\controllers\MigrateController', + 'migrationNamespaces' => [ + 'app\migrations', // アプリケーション全体のための共通のマイグレーション + 'module\migrations', // 特定のモジュールのためのマイグレーション +                'yii\rbac\migrations', // 特定のエクステンションのためのマイグレーション + ], + ], + ], +]; +``` + +これらをお互いに完全に分離して適用かつ追跡したい場合は、別々の名前空間とマイグレーション履歴テーブルを使う +複数のマイグレーションコマンドを構成することが出来ます。 + +```php +return [ + 'controllerMap' => [ + // アプリケーション全体のための共通のマイグレーション + 'migrate-app' => [ + 'class' => 'yii\console\controllers\MigrateController', + 'migrationNamespaces' => ['app\migrations'], + 'migrationTable' => 'migration_app', + ], + // 特定のモジュールのためのマイグレーション + 'migrate-module' => [ + 'class' => 'yii\console\controllers\MigrateController', + 'migrationNamespaces' => ['module\migrations'], + 'migrationTable' => 'migration_module', + ], + // 特定のエクステンションのためのマイグレーション + 'migrate-rbac' => [ + 'class' => 'yii\console\controllers\MigrateController', +            'migrationNamespaces' => ['yii\rbac\migrations'], + 'migrationTable' => 'migration_rbac', + ], + ], +]; +``` + +データベースを同期するためには、一つではなく複数のコマンドを実行しなければならなくなることに注意してください。 + +``` +yii migrate-app +yii migrate-module +yii migrate-rbac +``` + + ## 複数のデータベースにマイグレーションを適用する デフォルトでは、マイグレーションは `db` [アプリケーションコンポーネント](structure-application-components.md) によって指定された同じデータベースに対して適用されます。 diff --git a/docs/guide-ja/db-query-builder.md b/docs/guide-ja/db-query-builder.md index dbbfd36ee9..e8288b5e27 100644 --- a/docs/guide-ja/db-query-builder.md +++ b/docs/guide-ja/db-query-builder.md @@ -328,7 +328,7 @@ $query->filterWhere([ [[yii\db\Query::filterWhere()|filterWhere()]] と [[yii\db\Query::where()|where()]] の唯一の違いは、前者は [ハッシュ形式](#hash-format) の条件において提供された空の値を無視する、という点です。 従って、`$email` が空で `$sername` がそうではない場合は、上記のコードは、結果として `WHERE username=:username` という SQL 条件になります。 -> Info: 値が空であると見なされるのは、null、空の配列、空の文字列、または空白のみを含む文字列である場合です。 +> Info: 値が空であると見なされるのは、`null`、空の配列、空の文字列、または空白のみを含む文字列である場合です。 [[yii\db\Query::andWhere()|andWhere()]] または [[yii\db\Query::orWhere()|orWhere()]] と同じように、[[yii\db\Query::andFilterWhere()|andFilterWhere()]] または [[yii\db\Query::orFilterWhere()|orFilterWhere()]] を使って、既存の条件に別のフィルタ条件を追加することも出来ます。 @@ -346,6 +346,12 @@ $query->andFilterCompare('value', '<=100'); $query->andFilterCompare('name', 'Doe', 'like'); ``` +Yii 2.0.11 以降には、`HAVING` の条件のためにも、同様のメソッドがあります。 + +- [[yii\db\Query::filterHaving()|filterHaving()]] +- [[yii\db\Query::andFilterHaving()|andFilterHaving()]] +- [[yii\db\Query::orFilterHaving()|orFilterHaving()]] + ### [[yii\db\Query::orderBy()|orderBy()]] [[yii\db\Query::orderBy()|orderBy()]] メソッドは SQL クエリの `ORDER BY` 句を指定します。例えば、 diff --git a/docs/guide-ja/helper-array.md b/docs/guide-ja/helper-array.md index e0af8350c6..39541b629d 100644 --- a/docs/guide-ja/helper-array.md +++ b/docs/guide-ja/helper-array.md @@ -88,7 +88,7 @@ if (!ArrayHelper::keyExists('username', $data1, false) || !ArrayHelper::keyExist 良くある例は、ID のリストの取得です。 ```php -$data = [ +$array = [ ['id' => '123', 'data' => 'abc'], ['id' => '345', 'data' => 'def'], ]; @@ -114,7 +114,7 @@ $result = ArrayHelper::getColumn($array, function ($element) { `$groups` 属性はキーの配列であり、入力値の配列を一つまたは複数のサブ配列にグループ化するために使用されます。 -特定の要素の `$key` 属性またはその値が null であるとき、`$groups` が定義されていない場合は、その要素は破棄されて、結果には入りません。 +特定の要素の `$key` 属性またはその値が `null` であるとき、`$groups` が定義されていない場合は、その要素は破棄されて、結果には入りません。 そうではなく、`$groups` が指定されている場合は、配列の要素はキー無しで結果の配列に追加されます。 例えば、 @@ -398,7 +398,7 @@ $data = ArrayHelper::toArray($posts, [ - キー/値 のペア - 配列のキー名にしたい文字列と、値を取得すべきモデルのカラムの名前。 - キー/値 のペア - 配列のキー名にしたい文字列と、値を返すコールバック。 -変換の結果は以下のようになります。 +単一のモデルに対する上記の変換の結果は以下のようになります。 ```php diff --git a/docs/guide-ja/helper-html.md b/docs/guide-ja/helper-html.md index 80637ee26e..e1942a049b 100644 --- a/docs/guide-ja/helper-html.md +++ b/docs/guide-ja/helper-html.md @@ -42,7 +42,7 @@ Yii はそのような手助けを Html ヘルパの形式で提供します。 オプションは多くの Html ヘルパのメソッドとさまざまなウィジェットで使用されます。 その全ての場合において、いくつか追加の処理がなされることを知っておいてください。 -- 値が null である場合は、対応する属性はレンダリングされません。 +- 値が `null` である場合は、対応する属性はレンダリングされません。 - 値が真偽値である属性は、[真偽値属性 (boolean attributes)](http://www.w3.org/TR/html5/infrastructure.html#boolean-attributes) として扱われます。 - 属性の値は [[yii\helpers\Html::encode()|Html::encode()]] を使って HTML エンコードされます。 - 属性の値が配列である場合は、次のように処理されます。