mirror of
https://github.com/yiisoft/yii2.git
synced 2025-11-10 02:13:17 +08:00
Merge branch 'master' into docs-db-migration-fix
This commit is contained in:
@ -30,7 +30,7 @@ Yii は一連のマイグレーションコマンドラインツールを提供
|
||||
この節では、これらのツールを使用して、さまざまなタスクをどうやって達成するかを詳細に説明します。
|
||||
各ツールの使用方法は、ヘルプコマンド `yii help migrate` によっても知ることが出来ます。
|
||||
|
||||
> Note|注意: マイグレーションはデータベーススキーマに影響を及ぼすだけでなく、既存のデータを新しいスキーマに合うように修正したり、RBAC 階層を作成したり、キャッシュをクリーンアップしたりすることも出来ます。
|
||||
> Tip|ヒント: マイグレーションはデータベーススキーマに影響を及ぼすだけでなく、既存のデータを新しいスキーマに合うように修正したり、RBAC 階層を作成したり、キャッシュをクリーンアップしたりすることも出来ます。
|
||||
|
||||
|
||||
## マイグレーションを作成する <span id="creating-migrations"></span>
|
||||
@ -56,20 +56,32 @@ yii migrate/create create_news_table
|
||||
```php
|
||||
<?php
|
||||
|
||||
use yii\db\Schema;
|
||||
use yii\db\Migration;
|
||||
|
||||
class m150101_185401_create_news_table extends Migration
|
||||
{
|
||||
public function up()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public function down()
|
||||
{
|
||||
echo "m101129_185401_create_news_table cannot be reverted.\n";
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/*
|
||||
// Use safeUp/safeDown to run migration code within a transaction
|
||||
public function safeUp()
|
||||
{
|
||||
}
|
||||
|
||||
public function safeDown()
|
||||
{
|
||||
}
|
||||
*/
|
||||
}
|
||||
```
|
||||
|
||||
@ -86,11 +98,12 @@ class m150101_185401_create_news_table extends Migration
|
||||
下記のコードは、新しい `news` テーブルを作成するマイグレーションクラスをどのようにして実装するかを示すものです。
|
||||
|
||||
```php
|
||||
<?php
|
||||
|
||||
use yii\db\Schema;
|
||||
use yii\db\Migration;
|
||||
|
||||
class m150101_185401_create_news_table extends \yii\db\Migration
|
||||
class m150101_185401_create_news_table extends Migration
|
||||
{
|
||||
public function up()
|
||||
{
|
||||
@ -129,6 +142,32 @@ MySQL の場合は、`TYPE_PK` は `int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY`
|
||||
|
||||
> Info|情報: 抽象型と物理型の対応関係は、それぞれの `QueryBuilder` の具象クラスの [[yii\db\QueryBuilder::$typeMap|$typeMap]] プロパティによって定義されています。
|
||||
|
||||
バージョン 2.0.6 以降は、スキーマビルダにカラムのスキーマを定義するための更に便利な方法が導入されたため、上記のマイグレーションは次のように書くことが出来るようになっています。
|
||||
|
||||
```php
|
||||
<?php
|
||||
|
||||
use yii\db\Migration;
|
||||
|
||||
class m150101_185401_create_news_table extends Migration
|
||||
{
|
||||
public function up()
|
||||
{
|
||||
$this->createTable('news', [
|
||||
'id' => $this->primaryKey(),
|
||||
'title' => $this->string()->notNull(),
|
||||
'content' => $this->text(),
|
||||
]);
|
||||
}
|
||||
|
||||
public function down()
|
||||
{
|
||||
$this->dropTable('news');
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
カラムの型を定義するために利用できる全てのメソッドのリストは、[[yii\db\SchemaBuilderTrait]] の API ドキュメントで参照することが出来ます。
|
||||
|
||||
|
||||
### トランザクションを使うマイグレーション <span id="transactional-migrations"></span>
|
||||
@ -143,8 +182,8 @@ MySQL の場合は、`TYPE_PK` は `int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY`
|
||||
次の例では、`news` テーブルを作成するだけでなく、このテーブルに初期値となる行を挿入しています。
|
||||
|
||||
```php
|
||||
<?php
|
||||
|
||||
use yii\db\Schema;
|
||||
use yii\db\Migration;
|
||||
|
||||
class m150101_185401_create_news_table extends Migration
|
||||
@ -152,11 +191,11 @@ class m150101_185401_create_news_table extends Migration
|
||||
public function safeUp()
|
||||
{
|
||||
$this->createTable('news', [
|
||||
'id' => 'pk',
|
||||
'title' => Schema::TYPE_STRING . ' NOT NULL',
|
||||
'content' => Schema::TYPE_TEXT,
|
||||
'id' => $this->primaryKey(),
|
||||
'title' => $this->string()->notNull(),
|
||||
'content' => $this->text(),
|
||||
]);
|
||||
|
||||
|
||||
$this->insert('news', [
|
||||
'title' => 'test 1',
|
||||
'content' => 'content 1',
|
||||
@ -213,6 +252,12 @@ class m150101_185401_create_news_table extends Migration
|
||||
これは、通常、データベースからのデータ取得については、メッセージを追加して表示する必要がないからです。
|
||||
更にまた、複雑なクエリを構築して実行するためには、強力な [クエリビルダ](db-query-builder.md) を使うことが出来るからです。
|
||||
|
||||
> Note|注意: マイグレーションを使ってデータを操作する場合に、あなたは、あなたの [アクティブレコード](db-active-record.md) クラスをデータ操作に使えば便利じゃないか、と気付くかもしれません。
|
||||
> なぜなら、いくつかのロジックは既にアクティブレコードで実装済みだから、と。
|
||||
> しかしながら、マイグレーションの中で書かれるコードが永久に不変であることを本質とするのと対照的に、アプリケーションのロジックは変化にさらされるものであるということを心に留めなければなりません。
|
||||
> 従って、マイグレーションのコードでアクティブレコードを使用していると、アクティブレコードのレイヤにおけるロジックの変更が思いがけず既存のマイグレーションを破壊することがあり得ます。
|
||||
> このような理由のため、マイグレーションのコードはアクティブレコードのようなアプリケーションの他のロジックから独立を保つべきです。
|
||||
|
||||
|
||||
## マイグレーションを適用する <span id="applying-migrations"></span>
|
||||
|
||||
@ -390,7 +435,8 @@ yii migrate --db=db2
|
||||
例えば、次のようにします。
|
||||
|
||||
```php
|
||||
use yii\db\Schema;
|
||||
<?php
|
||||
|
||||
use yii\db\Migration;
|
||||
|
||||
class m150101_185401_create_news_table extends Migration
|
||||
|
||||
@ -373,7 +373,10 @@ class MyForm extends Model
|
||||
A standalone validator is a class extending [[yii\validators\Validator]] or its child class. You may implement
|
||||
its validation logic by overriding the [[yii\validators\Validator::validateAttribute()]] method. If an attribute
|
||||
fails the validation, call [[yii\base\Model::addError()]] to save the error message in the model, like you do
|
||||
with [inline validators](#inline-validators). For example,
|
||||
with [inline validators](#inline-validators).
|
||||
|
||||
|
||||
For example the inline validator above could be moved into new [[components/validators/CountryValidator]] class.
|
||||
|
||||
```php
|
||||
namespace app\components;
|
||||
@ -396,6 +399,32 @@ If you want your validator to support validating a value without a model, you sh
|
||||
instead of `validateAttribute()` and `validate()` because by default the latter two methods are implemented
|
||||
by calling `validateValue()`.
|
||||
|
||||
Below is an example of how you could use the above validator class within your model.
|
||||
|
||||
```php
|
||||
namespace app\models;
|
||||
|
||||
use Yii;
|
||||
use yii\base\Model;
|
||||
use app\components\validators\CountryValidator;
|
||||
|
||||
class EntryForm extends Model
|
||||
{
|
||||
public $name;
|
||||
public $email;
|
||||
public $country;
|
||||
|
||||
public function rules()
|
||||
{
|
||||
return [
|
||||
[['name', 'email'], 'required'],
|
||||
['country', CountryValidator::className()],
|
||||
['email', 'email'],
|
||||
];
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
## Client-Side Validation <span id="client-side-validation"></span>
|
||||
|
||||
|
||||
@ -37,7 +37,7 @@ by running `composer self-update`.
|
||||
|
||||
With Composer installed, you can install Yii by running the following commands under a Web-accessible folder:
|
||||
|
||||
composer global require "fxp/composer-asset-plugin:~1.0.0"
|
||||
composer global require "fxp/composer-asset-plugin:~1.0.3"
|
||||
composer create-project --prefer-dist yiisoft/yii2-app-basic basic
|
||||
|
||||
The first command installs the [composer asset plugin](https://github.com/francoispluchino/composer-asset-plugin/)
|
||||
|
||||
Reference in New Issue
Block a user