diff --git a/docs/guide-ja/concept-behaviors.md b/docs/guide-ja/concept-behaviors.md index 7d2e9028b1..7a1d0d2a4b 100644 --- a/docs/guide-ja/concept-behaviors.md +++ b/docs/guide-ja/concept-behaviors.md @@ -271,9 +271,9 @@ class User extends ActiveRecord 'attributes' => [ ActiveRecord::EVENT_BEFORE_INSERT => ['created_at', 'updated_at'], ActiveRecord::EVENT_BEFORE_UPDATE => ['updated_at'], - // UNIX タイムスタンプではなく datetime を使う場合は - // 'value' => new Expression('NOW()'), ], + // UNIX タイムスタンプではなく datetime を使う場合は + // 'value' => new Expression('NOW()'), ], ]; } diff --git a/docs/guide-ja/db-migrations.md b/docs/guide-ja/db-migrations.md index 37cbab5e20..547ad9f21a 100644 --- a/docs/guide-ja/db-migrations.md +++ b/docs/guide-ja/db-migrations.md @@ -171,6 +171,211 @@ class m150101_185401_create_news_table extends Migration カラムの型を定義するために利用できる全てのメソッドのリストは、[[yii\db\SchemaBuilderTrait]] の API ドキュメントで参照することが出来ます。 +## マイグレーションを生成する + +バージョン 2.0.7 以降では、マイグレーション・コンソールがマイグレーションを生成する便利な方法を提供しています。 + +マイグレーションの名前が `create_xxx` や `drop_xxx` などの特別な形式である場合は、 +生成されるマイグレーション・ファイルに追加のコードが書き込まれるのです。 + +### テーブルの作成 + +```php +yii migrate/create create_post +``` + +上記のコマンドは、次のコードを生成します。 + +```php +class m150811_220037_create_post extends Migration +{ + public function up() + { + $this->createTable('post', [ + 'id' => $this->primaryKey() + ]); + } + + public function down() + { + $this->dropTable('post'); + } +} +``` + +テーブルのフィールドも直接に生成したい場合は、`--fields` オプションでフィールドを指定します。 + +```php +yii migrate/create create_post --fields=title:string,body:text +``` + +これは、次のコードを生成します。 + +```php +class m150811_220037_create_post extends Migration +{ + public function up() + { + $this->createTable('post', [ + 'id' => $this->primaryKey(), + 'title' => $this->string(), + 'body' => $this->text() + ]); + } + + public function down() + { + $this->dropTable('post'); + } +} +``` + +さらに多くのフィールド・パラメータを指定することも出来ます。 + +```php +yii migrate/create create_post --fields=title:string(12):notNull:unique,body:text +``` + +これは、次のコードを生成します。 + +```php +class m150811_220037_create_post extends Migration +{ + public function up() + { + $this->createTable('post', [ + 'id' => $this->primaryKey(), + 'title' => $this->string(12)->notNull()->unique(), + 'body' => $this->text() + ]); + } + + public function down() + { + $this->dropTable('post'); + } +} +``` + +> Note|注意: プライマリ・キーが自動的に追加されて、デフォルトでは `id` と名付けられます。 +> 別の名前を使いたい場合は、`--fields=name:primaryKey` のように、明示的に指定してください。 + + +### テーブルを削除する + +```php +yii migrate/create drop_post --fields=title:string(12):notNull:unique,body:text +``` + +これは、次のコードを生成します。 + +```php +class m150811_220037_drop_post extends Migration +{ + public function up() + { + $this->dropTable('post'); + } + + public function down() + { + $this->createTable('post', [ + 'id' => $this->primaryKey(), + 'title' => $this->string(12)->notNull()->unique(), + 'body' => $this->text() + ]); + } +} +``` + +### カラムを追加する + +マイグレーションの名前が `add_xxx_to_yyy` の形式である場合、ファイルの内容は、必要となる `addColumn` と `dropColumn` を含むことになります。 + +カラムを追加するためには、次のようにします。 + +```php +yii migrate/create add_position_to_post --fields=position:integer +``` + +これが次のコードを生成します。 + +```php +class m150811_220037_add_position_to_post extends Migration +{ + public function up() + { + $this->addColumn('post', 'position', $this->integer()); + } + + public function down() + { + $this->dropColumn('post', 'position'); + } +} +``` + +### カラムを削除する + +マイグレーションの名前が `drop_xxx_from_yyy` の形式である場合、ファイルの内容は、必要となる `addColumn` と `dropColumn` を含むことになります。 + +```php +yii migrate/create drop_position_from_post --fields=position:integer +``` + +これは、次のコードを生成します。 + +```php +class m150811_220037_drop_position_from_post extends Migration +{ + public function up() + { + $this->dropColumn('post', 'position'); + } + + public function down() + { + $this->addColumn('post', 'position', $this->integer()); + } +} +``` + +### 中間テーブルを追加する + +マイグレーションの名前が `create_junction_xxx_and_yyy` の形式である場合は、中間テーブルを作成するのに必要となるコードが生成されます。 + +```php +yii create/migration create_junction_post_and_tag +``` + +これは、次のコードを生成します。 + +```php +class m150811_220037_create_junction_post_and_tag extends Migration +{ + public function up() + { + $this->createTable('post_tag', [ + 'post_id' => $this->integer(), + 'tag_id' => $this->integer(), + 'PRIMARY KEY(post_id, tag_id)' + ]); + + $this->createIndex('idx-post_tag-post_id', 'post_tag', 'post_id'); + $this->createIndex('idx-post_tag-tag_id', 'post_tag', 'tag_id'); + + $this->addForeignKey('fk-post_tag-post_id', 'post_tag', 'post_id', 'post', 'id', 'CASCADE'); + $this->addForeignKey('fk-post_tag-tag_id', 'post_tag', 'tag_id', 'tag', 'id', 'CASCADE'); + } + + public function down() + { + $this->dropTable('post_tag'); + } +} +``` + + ### トランザクションを使うマイグレーション 複雑な一連の DB マイグレーションを実行するときは、通常、データベースの一貫性と整合性を保つために、各マイグレーションが全体として成功または失敗することを保証する必要があります。 @@ -216,7 +421,7 @@ class m150101_185401_create_news_table extends Migration > Note|注意: 全ての DBMS がトランザクションをサポートしている訳ではありません。 また、トランザクションに入れることが出来ない DB クエリもあります。 - いくつかの例を [暗黙のコミット](http://dev.mysql.com/doc/refman/5.1/en/implicit-commit.html) で見ることが出来ます。 + いくつかの例を [暗黙のコミット](http://dev.mysql.com/doc/refman/5.7/en/implicit-commit.html) で見ることが出来ます。 その場合には、代りに、`up()` と `down()` を実装しなければなりません。 ### データベースアクセスメソッド @@ -392,6 +597,20 @@ yii migrate/mark 1392853618 # UNIX タイムスタンプ この値は、ファイルパスか、パス [エイリアス](concept-aliases.md) として指定することが出来ます。 テンプレートファイルは PHP スクリプトであり、その中で、マイグレーションクラスの名前を取得するための `$className` という事前定義された変数を使うことが出来ます。 +* `generatorTemplateFiles`: 配列 (デフォルト値は `[ + 'create_table' => '@yii/views/createTableMigration.php', + 'drop_table' => '@yii/views/dropTableMigration.php', + 'add_column' => '@yii/views/addColumnMigration.php', + 'drop_column' => '@yii/views/dropColumnMigration.php', + 'create_junction' => '@yii/views/createJunctionMigration.php' + ]`)。 + マイグレーション・コードを生成するためのテンプレート・ファイルを指定します。 + 詳細は "[マイグレーションを生成する](#generating-migrations)" を参照してください。 + +* `fields`: マイグレーション・コードを生成するためのカラム定義文字列の配列。 + デフォルト値は `[]`。個々の定義の書式は `COLUMN_NAME:COLUMN_TYPE:COLUMN_DECORATOR` です。 + 例えば、`--fields=name:string(12):notNull` は、サイズが 12 の null でない文字列カラムを作成します。 + 次の例は、これらのオプションの使い方を示すものです。 例えば、`forum` モジュールにマイグレーションを適用しようとしており、そのマイグレーションファイルがモジュールの `migrations` ディレクトリに配置されている場合、次のコマンドを使うことが出来ます。 diff --git a/docs/guide-ja/helper-array.md b/docs/guide-ja/helper-array.md index 546e168a3f..aa1f4a53f6 100644 --- a/docs/guide-ja/helper-array.md +++ b/docs/guide-ja/helper-array.md @@ -301,3 +301,22 @@ $data = ArrayHelper::toArray($posts, [ ``` 特定のクラスについて、配列に変換するデフォルトの方法を提供するためには、そのクラスの [[yii\base\Arrayable|Arrayable]] インタフェイスを実装することが出来ます。 + +## 配列の中にあるかどうか調べる + +ある要素が配列の中に存在するかどうか、また、一連の要素が配列のサブセットであるかどうか、ということを調べる必要がある場合がよくあります。 +PHP は `in_array()` を提供していますが、これはサブセットや `\Traversable` なオブジェクトをサポートしていません。 + +この種のチェックを助けるために、[[yii\base\ArrayHelper]] は [[yii\base\ArrayHelper::isIn()|isIn()]] +および [[yii\base\ArrayHelper::isSubset()|isSubset()]] を [[in_array()]] と同じシグニチャで提供しています。 + +```php +// true +ArrayHelper::isIn('a', ['a']); +// true +ArrayHelper::isIn('a', new(ArrayObject['a'])); + +// true +ArrayHelper::isSubset(new(ArrayObject['a', 'c']), new(ArrayObject['a', 'b', 'c']) + +``` diff --git a/docs/guide-ja/start-databases.md b/docs/guide-ja/start-databases.md index 6531785513..bda74fb9ab 100644 --- a/docs/guide-ja/start-databases.md +++ b/docs/guide-ja/start-databases.md @@ -76,6 +76,11 @@ return [ > Info|情報: `config/db.php` は、メインのアプリケーション構成情報ファイルである `config/web.php` によってインクルードされます。 この `config/web.php` が [アプリケーション](structure-applications.md) インスタンスが初期化される仕方を指定するものです。 詳しい情報については、[構成情報](concept-configurations.md) の節を参照してください。 +Yii がサポートを内蔵していないデータベースを扱う必要がある場合は、以下のエクステンションの利用を検討してください。 + +- [Informix](https://github.com/edgardmessias/yii2-informix) +- [IBM DB2](https://github.com/edgardmessias/yii2-ibm-db2) +- [Firebird](https://github.com/edgardmessias/yii2-firebird) アクティブレコードを作成する diff --git a/docs/guide-ja/tutorial-i18n.md b/docs/guide-ja/tutorial-i18n.md index f89908849f..01e9324711 100644 --- a/docs/guide-ja/tutorial-i18n.md +++ b/docs/guide-ja/tutorial-i18n.md @@ -690,7 +690,7 @@ class TranslationEventHandler どこに保存したいかを決めて、次のコマンドを発行してください。 ```bash -./yii message/config path/to/config.php +./yii message/config-template path/to/config.php ``` 作成されたファイルを開いて、あなたの要求に合わせてパラメータを修正します。 @@ -700,12 +700,22 @@ class TranslationEventHandler * `messagePath`: メッセージファイルを保存するパス。 これは、アプリケーションの構成情報で記述されている `i18n` の `basePath` と合致しなければなりません。 -> エイリアスがここではサポートされていないことに注意してください。 - 構成情報ファイルの位置からの相対パスで記述しなければなりません。 +'./yii message/config' コマンドを使って、CLI 経由で、指定したオプションを持つ設定ファイルを動的に生成することも可能です。 +例えば、`languages` と `messagePath` のパラメータは、次のようにして設定することが出来ます。 + +```shell +./yii message/config --languages=de,ja --messagePath=messages path/to/config.php +``` + +利用可能なオプションのリストを取得するためには、次のコマンドを実行します。 + +```shell +./yii help message/config +``` 構成情報ファイルの編集が完了すれば、ついに、下記のコマンドを使ってメッセージを抽出することが出来ます。 -```bash +```shell ./yii message path/to/config.php ``` diff --git a/docs/internals-ja/translation-workflow.md b/docs/internals-ja/translation-workflow.md index 24b3e0f8bd..a5f3ee0174 100644 --- a/docs/internals-ja/translation-workflow.md +++ b/docs/internals-ja/translation-workflow.md @@ -15,11 +15,11 @@ Yii は国際的なアプリケーションと開発者にとって役に立つ 1. `framework/messages/config.php` をチェックして、あなたの言語が `languages` のリストに載っていることを確認してください。 もし無ければ、あなたの言語をそこに追加します (リストをアルファベット順に保つことを忘れないでください)。 言語コードの形式は、例えば `ru` や `zh-CN` のように、[IETF言語タグ](http://ja.wikipedia.org/wiki/IETF%E8%A8%80%E8%AA%9E%E3%82%BF%E3%82%B0) に従うべきです。 -2. `framework` に入って、`yii message/extract messages/config.php` を走らせます。 +2. `framework` に入って、`./yii message/extract --languages=` を走らせます。 3. `framework/messages/your_language/yii.php` のメッセージを翻訳します。ファイルは必ず UTF-8 エンコーディングを使って保存してください。 4. [プルリクエスト](git-workflow.md) をします。 -あなたの翻訳を最新状態に保つために、`yii message/extract messages/config.php` を再び走らせることが出来ます。 +あなたの翻訳を最新状態に保つために、`./yii message/extract --languages=` を再び走らせることが出来ます。 このコマンドは、変更のなかった箇所には触れることなく、自動的にメッセージを再抽出してくれます。 翻訳ファイルの中で、配列の各要素は、メッセージ(キー)と翻訳(値)をあらわします。