yii はどのようにしてデータベースに接続しますか?
Yii2.0 でのデータベースへの接続についての深い理解
Yii は PDO (PHP Date Object) を使用してさまざまなデータベースに接続します。したがって、ほとんどすべての主流 Yii は、あらゆるデータベースに対して優(yōu)れたサポートを提供できます。これは、成熟したフレームワークが持つべき幅広い適用性でもあります。
推奨學(xué)習(xí): yii フレームワーク
データベースで操作を?qū)g行する前に、データベース サーバーとの接続を確立する必要があります。 Yii アプリケーションには、データベース接続を処理するための専用のコアコンポーネントがあり、設(shè)定ファイルで簡(jiǎn)単に見(jiàn)つけることができます:
'components' => [ 'db' => [ 'class' => 'yii\db\Connection', 'dsn' => 'mysql:host=localhost;dbname=yii2advanced', 'username' => 'root', 'password' => '', 'charset' => 'utf8', ], // ... ... ], // ... ...
誰(shuí)かがここで推測(cè)したはずですが、Yii は yii\db \Connection を使用してデータベースを表します繋がり。この接続は、PDO の単純なカプセル化を?qū)g裝し、さまざまなデータベース間の違いをマスクし、統(tǒng)合された開(kāi)発インターフェイスを?qū)g裝します。こうすることで、プログラミング プロセス中にデータベースの互換性の問(wèn)題のほとんどを無(wú)視して、機(jī)能開(kāi)発に重點(diǎn)を置くことができます。たとえば、MySQL などで Money 型フィールドが使用できないことを心配する必要はなくなります。
データベース スキーマ
Connection がさまざまなデータベースから獨(dú)立していることを理解するには、データベース スキーマについて言及する必要があります。 Yii はさまざまな主流のデータベーススキーマを提供しており、獨(dú)自のデータベース管理システム (DBMS) に合わせて獨(dú)自のスキーマを作成することもできます。スキーマに関連するクラスがいくつかあります。
yii\db\Schema 抽象クラス。さまざまな DBMS のスキーマを記述するために使用されます。
yii\db\TableSchema は、テーブル構(gòu)造を記述するために使用されます。
yii\db\ColumnSchema は、フィールド情報(bào)を記述するために使用されます。
yii\db\pgsql、yii\db\mysql、yii\db\sqlite、yii\db\mssql、yii\db\oci、yii\db\cubird のさまざまなスキーマ、特定のさまざまな DBMS について説明。
yii\db\Connection には、PDO データベース ドライバーと特定のスキーマ クラス間のマッピング関係を確立するために使用される $schemaMap 配列があります。
public $schemaMap = [ 'pgsql' => 'yii\db\pgsql\Schema', // PostgreSQL 'mysqli' => 'yii\db\mysql\Schema', // MySQL 'mysql' => 'yii\db\mysql\Schema', // MySQL 'sqlite' => 'yii\db\sqlite\Schema', // sqlite 3 'sqlite2' => 'yii\db\sqlite\Schema', // sqlite 2 'sqlsrv' => 'yii\db\mssql\Schema', // newer MSSQL driver on MS Windows hosts 'oci' => 'yii\db\oci\Schema', // Oracle driver 'mssql' => 'yii\db\mssql\Schema', // older MSSQL driver on MS Windows hosts 'dblib' => 'yii\db\mssql\Schema', // dblib drivers on GNU/Linux (and maybe other OSes) hosts 'cubrid' => 'yii\db\cubrid\Schema', // CUBRID ];
次のように考えることができます。 Yii のデフォルトは、上記の配列で 10 個(gè)の DBMS (6 スキーマ) をサポートしますが、ほとんどの場(chǎng)合、これで十分です。この範(fàn)囲を超えて DBMS を使用する場(chǎng)合は、Yii が互換性を確保しながら DBMS をサポートできるように、スキーマを自分で記述することができます。
スキーマ基本クラス
yii\db\Schema は抽象クラスであり、具體的な実裝はさまざまな DBMS のスキーマの 6 つのサブクラスに依存します。まず泥棒を捕まえるには、まず王を捕まえてください。コードを読むときは、最初に基本クラスを読んでください。最初にこの yii\db\Schema を見(jiàn)てみましょう:
abstract class Schema extends Object { // 預(yù)定義16種基本字段類型,這16種類型是與DBMS無(wú)關(guān)的,具體到特定的DBMS時(shí),Yii會(huì)自動(dòng) // 轉(zhuǎn)換成合適的數(shù)據(jù)庫(kù)字段類型。 const TYPE_PK = 'pk'; const TYPE_BIGPK = 'bigpk'; const TYPE_STRING = 'string'; const TYPE_TEXT = 'text'; const TYPE_SMALLINT = 'smallint'; const TYPE_INTEGER = 'integer'; const TYPE_BIGINT = 'bigint'; const TYPE_FLOAT = 'float'; const TYPE_DECIMAL = 'decimal'; const TYPE_DATETIME = 'datetime'; const TYPE_TIMESTAMP = 'timestamp'; const TYPE_TIME = 'time'; const TYPE_DATE = 'date'; const TYPE_BINARY = 'binary'; const TYPE_BOOLEAN = 'boolean'; const TYPE_MONEY = 'money'; // 加載表schema,需要子類具體實(shí)現(xiàn) abstract protected function loadTableSchema($name); // ... ... }
yii\db\Schema.まず、DBMS 間の最も明らかな違いに焦點(diǎn)を當(dāng)てますが、フィールドのデータ型は統(tǒng)一されており、16 種類の基本的なフィールド型が提供されています。これら 16 種類は DBMS とは関係がありませんが、特定の DBMS に関しては、Yii が自動(dòng)的に適切なデータベース フィールド タイプに変換します。プログラミングにおいてフィールドの型を指定する必要がある場(chǎng)合、これらの 16 種類を使用します。この場(chǎng)合、使用する特定の DBMS がそれをサポートしているかどうかを考慮する必要はありません。
この 16 種類が何を意味するかは、見(jiàn)ればわかると思いますので、詳しい説明は省略します。
yii\db\Schema::loadTableSchema() は、基本クラス全體で最も重要なステートメントです。テーブルのスキーマをロードする関數(shù)を定義します。この関數(shù)は、特定のサブクラスによって実裝される必要があります。 DBMS。ここでは、yii\db\mysql\Schema サブクラスを例として説明します:
class Schema extends \yii\db\Schema { // 定義一個(gè)數(shù)據(jù)類型的映射關(guān)系 public $typeMap = [ 'tinyint' => self::TYPE_SMALLINT, 'bit' => self::TYPE_INTEGER, 'smallint' => self::TYPE_SMALLINT, 'mediumint' => self::TYPE_INTEGER, 'int' => self::TYPE_INTEGER, 'integer' => self::TYPE_INTEGER, 'bigint' => self::TYPE_BIGINT, 'float' => self::TYPE_FLOAT, 'double' => self::TYPE_FLOAT, 'real' => self::TYPE_FLOAT, 'decimal' => self::TYPE_DECIMAL, 'numeric' => self::TYPE_DECIMAL, 'tinytext' => self::TYPE_TEXT, 'mediumtext' => self::TYPE_TEXT, 'longtext' => self::TYPE_TEXT, 'longblob' => self::TYPE_BINARY, 'blob' => self::TYPE_BINARY, 'text' => self::TYPE_TEXT, 'varchar' => self::TYPE_STRING, 'string' => self::TYPE_STRING, 'char' => self::TYPE_STRING, 'datetime' => self::TYPE_DATETIME, 'year' => self::TYPE_DATE, 'date' => self::TYPE_DATE, 'time' => self::TYPE_TIME, 'timestamp' => self::TYPE_TIMESTAMP, 'enum' => self::TYPE_STRING, ]; }
yii\db\mysql\Schema は、最初にマッピング関係を定義します。このマッピング関係は、MySQL データベースのフィールド タイプです。および前に説明した 16 の基本データ型のマッピング関係。つまり、MySQL Schema に基づいて、MySQL のフィールド型を使用すると、統(tǒng)一された 16 個(gè)の基本データ型に変換されます。
テーブル情報(bào) (テーブル スキーマ)
yii\db\TableSchema クラスは、データ テーブルの情報(bào)を記述するために使用されます:
class TableSchema extends Object { public $schemaName; // 所屬的Schema public $name; // 表名,不包含Schema部分 public $fullName; // 表的完整名稱,可能包含一個(gè)Schema前綴。 public $primaryKey = []; // 主鍵 public $sequenceName; // 主鍵若使用sequence,該屬性表示序列名 public $foreignKeys = []; // 外鍵 public $columns = []; // 字段 // ... ... }
上記のコード yii\db\TableSchema は比較的単純です。上記の屬性を見(jiàn)れば、何に使われるかが大體わかります。それを理解するために、ここで少しクリックしてみましょう。
列情報(bào) (列スキーマ)
yii\db\ColumnSchema クラスはフィールドの情報(bào)を記述するために使用されます。見(jiàn)てみましょう:
class ColumnSchema extends Object { public $name; // 字段名 public $allowNull; // 是否可以為NULL /** * @var string abstract type of this column. Possible abstract types include: * string, text, boolean, smallint, integer, bigint, float, decimal, datetime, * timestamp, time, date, binary, and money. */ public $type; // 字段的類型 /** * @var string the PHP type of this column. Possible PHP types include: * `string`, `boolean`, `integer`, `double`. */ public $phpType; // 字段類型對(duì)應(yīng)的PHP數(shù)據(jù)類型 /** * @var string the DB type of this column. Possible DB types vary according to the type of DBMS. */ public $dbType; public $defaultValue; // 字段默認(rèn)值 public $enumValues; // 若字段為枚舉類型,該屬性用于表示可供枚舉的值 /** * @var integer display size of the column. */ public $size; public $precision; // 若字段為數(shù)值,該屬性用于表示精度 /** * @var integer scale of the column data, if it is numeric. */ public $scale; /** * @var boolean whether this column is a primary key */ public $isPrimaryKey; // 是否是主鍵 public $autoIncrement = false; // 是否是自增長(zhǎng)字段 /** * @var boolean whether this column is unsigned. This is only meaningful * when [[type]] is `smallint`, `integer` or `bigint`. */ public $unsigned; // 是否是unsigned,僅對(duì)支持的類型有效 public $comment; // 字段描述信息 /** * Converts the input value according to [[phpType]] after retrieval from the database. * If the value is null or an [[Expression]], it will not be converted. * @param mixed $value input value * @return mixed converted value */ public function phpTypecast($value) { if ($value === '' && $this->type !== Schema::TYPE_TEXT && $this->type !== Schema::TYPE_STRING && $this->type !== Schema::TYPE_BINARY) { return null; } if ($value === null || gettype($value) === $this->phpType || $value instanceof Expression) { return $value; } switch ($this->phpType) { case 'resource': case 'string': return is_resource($value) ? $value : (string) $value; case 'integer': return (int) $value; case 'boolean': return (bool) $value; case 'double': return (double) $value; } return $value; } /** * Converts the input value according to [[type]] and [[dbType]] for use in a db query. * If the value is null or an [[Expression]], it will not be converted. * @param mixed $value input value * @return mixed converted value. This may also be an array containing the value as the first element * and the PDO type as the second element. */ public function dbTypecast($value) { // the default implementation does the same as casting for PHP but it should be possible // to override this with annotation of explicit PDO type. return $this->phpTypecast($value); } }
以上がyii でデータベースに接続する方法の詳細(xì)內(nèi)容です。詳細(xì)については、PHP 中國(guó)語(yǔ) Web サイトの他の関連記事を參照してください。

ホットAIツール

Undress AI Tool
脫衣畫(huà)像を無(wú)料で

Undresser.AI Undress
リアルなヌード寫(xiě)真を作成する AI 搭載アプリ

AI Clothes Remover
寫(xiě)真から衣服を削除するオンライン AI ツール。

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無(wú)料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡(jiǎn)単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無(wú)料のコードエディター

SublimeText3 中國(guó)語(yǔ)版
中國(guó)語(yǔ)版、とても使いやすい

ゼンドスタジオ 13.0.1
強(qiáng)力な PHP 統(tǒng)合開(kāi)発環(huán)境

ドリームウィーバー CS6
ビジュアル Web 開(kāi)発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

現(xiàn)在の情報(bào)化時(shí)代では、ビッグデータ、人工知能、クラウド コンピューティング、その他のテクノロジーが大手企業(yè)の焦點(diǎn)となっています。その中でも、高性能なグラフィックス処理技術(shù)として、グラフィックスカードレンダリング技術(shù)がますます注目を集めています。グラフィックス カード レンダリング テクノロジは、ゲーム開(kāi)発、映畫(huà)やテレビの特殊効果、エンジニアリング モデリングなどの分野で広く使用されています。開(kāi)発者にとって、自分のプロジェクトに合ったフレームワークを選択することは非常に重要な決定です?,F(xiàn)在の言語(yǔ)の中でも PHP は非常に動(dòng)的な言語(yǔ)であり、Yii2、Ph などの優(yōu)れた PHP フレームワークもいくつかあります。

Yii フレームワークは、Web アプリケーション開(kāi)発のプロセスを簡(jiǎn)素化するための多數(shù)のツールとコンポーネントを提供するオープンソースの PHP Web アプリケーション フレームワークであり、その重要なコンポーネントの 1 つがデータ クエリです。 Yii フレームワークでは、SQL に似た構(gòu)文を使用してデータベースにアクセスし、データを効率的にクエリおよび操作できます。 Yii フレームワークのクエリビルダーには主に次の種類があります: ActiveRecord クエリ、QueryBuilder クエリ、コマンド クエリ、獨(dú)自の SQL クエリ

Web アプリケーションの需要が高まるにつれ、開(kāi)発者が開(kāi)発フレームワークを選択する選択肢はますます増えています。 PHP フレームワークとして人気のある Symfony と Yii2 は、どちらも強(qiáng)力な機(jī)能とパフォーマンスを備えていますが、大規(guī)模な Web アプリケーションを開(kāi)発する必要がある場(chǎng)合、どちらのフレームワークがより適しているのでしょうか。次に、より良い選択を行うために、Symphony と Yii2 の比較分析を行います?;靖乓?Symphony は、PHP で書(shū)かれたオープンソースの Web アプリケーション フレームワークであり、上に構(gòu)築されています。

クラウド コンピューティング テクノロジの継続的な発展により、データのバックアップはすべての企業(yè)が行う必要のあるものになりました。この文脈では、可用性の高いクラウド バックアップ システムを開(kāi)発することが特に重要です。 PHP フレームワーク Yii は、開(kāi)発者が高性能の Web アプリケーションを迅速に構(gòu)築できる強(qiáng)力なフレームワークです。ここでは、Yii フレームワークを使用して可用性の高いクラウド バックアップ システムを開(kāi)発する方法を紹介します。データベースモデルの設(shè)計(jì) Yii フレームワークでは、データベースモデルは非常に重要な部分です。データ バックアップ システムには多くのテーブルとリレーションシップが必要なため、

LaravelとYiiの主な違いは、デザインの概念、機(jī)能的特性、使用シナリオです。 1.Laravelは、開(kāi)発のシンプルさと喜びに焦點(diǎn)を當(dāng)てており、迅速な開(kāi)発や初心者に適したEloquentormやArtisan Toolsなどの豊富な機(jī)能を提供します。 2.YIIはパフォーマンスと効率を強(qiáng)調(diào)し、高負(fù)荷アプリケーションに適しており、効率的なActiverCordおよびキャッシュシステムを提供しますが、急な學(xué)習(xí)曲線があります。

Dockerを使用してYIIアプリケーションをコンテナ化および展開(kāi)する手順には次のものがあります。1。DockerFileを作成し、畫(huà)像構(gòu)築プロセスを定義します。 2. DockerComposeを使用して、YIIアプリケーションとMySQLデータベースを起動(dòng)します。 3.畫(huà)像のサイズとパフォーマンスを最適化します。これには、特定の技術(shù)的運(yùn)用だけでなく、DockerFileの作業(yè)原則とベストプラクティスを理解して、効率的で信頼できる展開(kāi)を確保することも含まれます。

インターネットの急速な発展に伴い、API はさまざまなアプリケーション間でデータを交換する重要な方法になりました。したがって、保守が容易で効率的で安定した API フレームワークを開(kāi)発することがますます重要になっています。 API フレームワークを選択する場(chǎng)合、Yii2 と Symfony の 2 つは開(kāi)発者の間で人気のある選択肢です。では、どちらが API 開(kāi)発に適しているのでしょうか?この記事では、これら 2 つのフレームワークを比較し、いくつかの結(jié)論を示します。 1. 基本的な紹介 Yii2 と Symfony は、開(kāi)発に使用できる対応する拡張機(jī)能を備えた成熟した PHP フレームワークです。

「Yii とは何ですか?」という質(zhì)問(wèn)がある場(chǎng)合は、私の以前のチュートリアル「Yii フレームワークの紹介」を參照してください。このチュートリアルでは、Yii の利點(diǎn)をレビューし、2014 年 10 月にリリースされた Yii 2.0 の新機(jī)能の概要を説明しています。うーん> この Yii2 によるプログラミング シリーズでは、読者に Yii2PHP フレームワークの使い方をガイドします。今日のチュートリアルでは、Yii のコンソール機(jī)能を活用して cron ジョブを?qū)g行する方法を共有します。以前、私はバックグラウンド タスクを?qū)g行するために cron ジョブで wget (Web アクセス可能な URL) を使用しました。これにより、セキュリティ上の懸念が生じ、パフォーマンス上の問(wèn)題も発生します。 Security for Startup シリーズでリスクを軽減するいくつかの方法について説明しましたが、コンソール駆動(dòng)のコマンドに移行したいと考えていました。
