日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

php中metadata,模型元数据(Models Metadata)

發(fā)布時(shí)間:2025/3/11 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php中metadata,模型元数据(Models Metadata) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

To speed up development Phalcon\Mvc\Model helps you to query fields and constraints from tables related to models. To achieve this, Phalcon\Mvc\Model\MetaData is available to manage and cache table metadata.

Phalcon\Mvc\Model 能幫助你查詢字段從表關(guān)聯(lián)到模型和約束從而加快你的開(kāi)發(fā)效率。為了達(dá)到這個(gè)目標(biāo), Phalcon\Mvc\Model\MetaData元數(shù)據(jù)管理和緩存表的元數(shù)據(jù)是有必要的。

Sometimes it is necessary to get those attributes when working with models. You can get a metadata instance as follows:

有時(shí)候,在使用模型時(shí)需要獲得這些屬性。您可以獲得一個(gè)元數(shù)據(jù)實(shí)例:

~~~

$robot = new Robots();

// Get Phalcon\Mvc\Model\Metadata instance

$metadata = $robot->getModelsMetaData();

// Get robots fields names

$attributes = $metadata->getAttributes($robot);

print_r($attributes);

// Get robots fields data types

$dataTypes = $metadata->getDataTypes($robot);

print_r($dataTypes);

~~~

#### 緩存元數(shù)據(jù)(Caching Metadata)

Once the application is in a production stage, it is not necessary to query the metadata of the table from the database system each time you use the table. This could be done caching the metadata using any of the following adapters:

一旦應(yīng)用程序處于生產(chǎn)階段,就不需要在每次使用該表時(shí)從數(shù)據(jù)庫(kù)系統(tǒng)查詢表的元數(shù)據(jù)。可以使用以下任何一個(gè)適配器來(lái)緩存元數(shù)據(jù):

| Adapter 適配器 | Description 描述 | API |

| --- | --- | --- |

| Memory 內(nèi)存 | This adapter is the default. The metadata is cached only during the request. When the request is completed, the metadata are released as part of the normal memory of the request. This adapter is perfect when the application is in development so as to refresh the metadata in each request containing the new and/or modified fields. 這個(gè)適配器是默認(rèn)的。元數(shù)據(jù)僅在請(qǐng)求期間被緩存。當(dāng)請(qǐng)求完成時(shí),元數(shù)據(jù)作為請(qǐng)求的正常內(nèi)存的一部分被釋放。當(dāng)應(yīng)用程序處于開(kāi)發(fā)階段時(shí),該適配器是完美的,以便在包含新/或修改字段的每個(gè)請(qǐng)求中刷新元數(shù)據(jù)。 | Phalcon\Mvc\Model\MetaData\Memory |

| Session 會(huì)話 | This adapter stores metadata in the `$_SESSION `superglobal. This adapter is recommended only when the application is actually using a small number of models. The metadata are refreshed every time a new session starts. This also requires the use of `session_start()` to start the session before using any models. 該適配器將元數(shù)據(jù)存儲(chǔ)在$SESSION超全局中。只有當(dāng)應(yīng)用程序?qū)嶋H使用少量的模型時(shí),才推薦這個(gè)適配器。每次新會(huì)話開(kāi)始時(shí),元數(shù)據(jù)都會(huì)刷新。這還需要使用sessionstart()在使用任何模型之前,先啟動(dòng)會(huì)話。 | Phalcon\Mvc\Model\MetaData\Session |

| Apc | This adapter uses the Alternative PHP Cache (APC) to store the table metadata. You can specify the lifetime of the metadata with options. This is the most recommended way to store metadata when the application is in production stage. 這個(gè)適配器使用另一個(gè)PHP緩存(APC)來(lái)存儲(chǔ)表元數(shù)據(jù)。您可以使用選項(xiàng)指定元數(shù)據(jù)的生命周期。當(dāng)應(yīng)用程序處于生產(chǎn)階段時(shí),這是最推薦的存儲(chǔ)元數(shù)據(jù)的方法。 | Phalcon\Mvc\Model\MetaData\Apc |

| XCache | This adapter uses XCache to store the table metadata. You can specify the lifetime of the metadata with options. This is the most recommended way to store metadata when the application is in production stage. 這個(gè)適配器使用XCache來(lái)存儲(chǔ)表元數(shù)據(jù)。您可以使用選項(xiàng)指定元數(shù)據(jù)的生命周期。當(dāng)應(yīng)用程序處于生產(chǎn)階段時(shí),這是最推薦的存儲(chǔ)元數(shù)據(jù)的方法。 | Phalcon\Mvc\Model\MetaData\Xcache |

| Files | This adapter uses plain files to store metadata. By using this adapter the disk-reading is increased but the database access is reduced. 該適配器使用普通文件存儲(chǔ)元數(shù)據(jù)。通過(guò)使用這個(gè)適配器,磁盤(pán)讀取增加了,但是數(shù)據(jù)庫(kù)訪問(wèn)減少了。 | Phalcon\Mvc\Model\MetaData\Files |

As other ORM’s dependencies, the metadata manager is requested from the services container:

作為其他ORM的依賴項(xiàng),從服務(wù)容器請(qǐng)求元數(shù)據(jù)管理器:

~~~

use Phalcon\Mvc\Model\MetaData\Apc as ApcMetaData;

$di["modelsMetadata"] = function () {

// Create a metadata manager with APC

$metadata = new ApcMetaData(

[

"lifetime" => 86400,

"prefix" => "my-prefix",

]

);

return $metadata;

};

~~~

#### 元數(shù)據(jù)策略(Metadata Strategies)

As mentioned above the default strategy to obtain the model’s metadata is database introspection. In this strategy, the information schema is used to know the fields in a table, its primary key, nullable fields, data types, etc.

正如上面提到的,獲取模型元數(shù)據(jù)的默認(rèn)策略是數(shù)據(jù)庫(kù)內(nèi)省。在這個(gè)策略中,信息模式用于了解表中的字段、它的主鍵、可空字段、數(shù)據(jù)類型等。

You can change the default metadata introspection in the following way:

您可以以下方式更改默認(rèn)的元數(shù)據(jù)內(nèi)省:

~~~

use Phalcon\Mvc\Model\MetaData\Apc as ApcMetaData;

$di["modelsMetadata"] = function () {

// Instantiate a metadata adapter

$metadata = new ApcMetaData(

[

"lifetime" => 86400,

"prefix" => "my-prefix",

]

);

// Set a custom metadata introspection strategy

$metadata->setStrategy(

new MyIntrospectionStrategy()

);

return $metadata;

};

~~~

#### 數(shù)據(jù)庫(kù)內(nèi)部策略(Database Introspection Strategy)

This strategy doesn’t require any customization and is implicitly used by all the metadata adapters.

此策略不需要任何定制,并且被所有元數(shù)據(jù)適配器隱式地使用。

#### 注釋策略(Annotations Strategy)

This strategy makes use of annotations to describe the columns in a model:

該策略使用注釋來(lái)描述模型中的列:

~~~

use Phalcon\Mvc\Model;

class Robots extends Model

{

/**

* @Primary

* @Identity

* @Column(type="integer", nullable=false)

*/

public $id;

/**

* @Column(type="string", length=70, nullable=false)

*/

public $name;

/**

* @Column(type="string", length=32, nullable=false)

*/

public $type;

/**

* @Column(type="integer", nullable=false)

*/

public $year;

}

~~~

Annotations must be placed in properties that are mapped to columns in the mapped source. Properties without the @Column annotation are handled as simple class attributes.

注釋必須放在映射到映射源中的列的屬性中。沒(méi)有@column注釋的屬性被處理為簡(jiǎn)單的類屬性。

The following annotations are supported:

下面的注釋得到了支持:

| Name 名字 | Description 描述 |

| --- | --- |

| Primary | Mark the field as part of the table’s primary key 將字段標(biāo)記為表的主鍵的一部分 |

| Identity | The field is an auto_increment/serial column 該字段是一個(gè)自動(dòng)遞增/串行列 |

| Column | This marks an attribute as a mapped column 它將一個(gè)屬性標(biāo)記為一個(gè)映射的列 |

The annotation @Column supports the following parameters:

@column的注釋支持以下參數(shù):

| Name | Description 描述 |

| --- | --- |

| type | The column’s type (string, integer, decimal, boolean) 列的類型(字符串、整數(shù)、小數(shù)、布爾) |

| length | The column’s length if any 列的長(zhǎng)度如果有的話 |

| nullable | Set whether the column accepts null values or not 設(shè)置該列是否接受null值 |

The annotations strategy could be set up this way:

注釋策略可以這樣設(shè)置:

~~~

use Phalcon\Mvc\Model\MetaData\Apc as ApcMetaData;

use Phalcon\Mvc\Model\MetaData\Strategy\Annotations as StrategyAnnotations;

$di["modelsMetadata"] = function () {

// Instantiate a metadata adapter

$metadata = new ApcMetaData(

[

"lifetime" => 86400,

"prefix" => "my-prefix",

]

);

// Set a custom metadata database introspection

$metadata->setStrategy(

new StrategyAnnotations()

);

return $metadata;

};

~~~

#### 自定義元數(shù)據(jù)(Manual Metadata)

Phalcon can obtain the metadata for each model automatically without the developer must set them manually using any of the introspection strategies presented above.

如果沒(méi)有開(kāi)發(fā)人員必須手動(dòng)使用上面介紹的任何一種內(nèi)省策略,那么就可以自動(dòng)為每個(gè)模型獲取元數(shù)據(jù)。

The developer also has the option of define the metadata manually. This strategy overrides any strategy set in the metadata manager. New columns added/modified/removed to/from the mapped table must be added/modified/removed also for everything to work properly.

開(kāi)發(fā)人員還可以手動(dòng)定義元數(shù)據(jù)。該策略覆蓋了元數(shù)據(jù)管理器中的任何策略。從映射表中添加/修改/刪除的新列必須被添加/修改/刪除,以便所有的工作都能正常工作。

The following example shows how to define the metadata manually:

下面的例子展示了如何手動(dòng)定義元數(shù)據(jù):

~~~

use Phalcon\Mvc\Model;

use Phalcon\Db\Column;

use Phalcon\Mvc\Model\MetaData;

class Robots extends Model

{

public function metaData()

{

return array(

// Every column in the mapped table

MetaData::MODELS_ATTRIBUTES => [

"id",

"name",

"type",

"year",

],

// Every column part of the primary key

MetaData::MODELS_PRIMARY_KEY => [

"id",

],

// Every column that isn't part of the primary key

MetaData::MODELS_NON_PRIMARY_KEY => [

"name",

"type",

"year",

],

// Every column that doesn't allows null values

MetaData::MODELS_NOT_NULL => [

"id",

"name",

"type",

],

// Every column and their data types

MetaData::MODELS_DATA_TYPES => [

"id" => Column::TYPE_INTEGER,

"name" => Column::TYPE_VARCHAR,

"type" => Column::TYPE_VARCHAR,

"year" => Column::TYPE_INTEGER,

],

// The columns that have numeric data types

MetaData::MODELS_DATA_TYPES_NUMERIC => [

"id" => true,

"year" => true,

],

// The identity column, use boolean false if the model doesn't have

// an identity column

MetaData::MODELS_IDENTITY_COLUMN => "id",

// How every column must be bound/casted

MetaData::MODELS_DATA_TYPES_BIND => [

"id" => Column::BIND_PARAM_INT,

"name" => Column::BIND_PARAM_STR,

"type" => Column::BIND_PARAM_STR,

"year" => Column::BIND_PARAM_INT,

],

// Fields that must be ignored from INSERT SQL statements

MetaData::MODELS_AUTOMATIC_DEFAULT_INSERT => [

"year" => true,

],

// Fields that must be ignored from UPDATE SQL statements

MetaData::MODELS_AUTOMATIC_DEFAULT_UPDATE => [

"year" => true,

],

// Default values for columns

MetaData::MODELS_DEFAULT_VALUES => [

"year" => "2015",

],

// Fields that allow empty strings

MetaData::MODELS_EMPTY_STRING_VALUES => [

"name" => true,

],

);

}

}

~~~

總結(jié)

以上是生活随笔為你收集整理的php中metadata,模型元数据(Models Metadata)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。