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

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 能帮助你查询字段从表关联到模型和约束从而加快你的开发效率。为了达到这个目标, Phalcon\Mvc\Model\MetaData元数据管理和缓存表的元数据是有必要的。

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

有时候,在使用模型时需要获得这些属性。您可以获得一个元数据实例:

~~~

$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);

~~~

#### 缓存元数据(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:

一旦应用程序处于生产阶段,就不需要在每次使用该表时从数据库系统查询表的元数据。可以使用以下任何一个适配器来缓存元数据:

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

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

| Memory 内存 | 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. 这个适配器是默认的。元数据仅在请求期间被缓存。当请求完成时,元数据作为请求的正常内存的一部分被释放。当应用程序处于开发阶段时,该适配器是完美的,以便在包含新/或修改字段的每个请求中刷新元数据。 | Phalcon\Mvc\Model\MetaData\Memory |

| Session 会话 | 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. 该适配器将元数据存储在$SESSION超全局中。只有当应用程序实际使用少量的模型时,才推荐这个适配器。每次新会话开始时,元数据都会刷新。这还需要使用sessionstart()在使用任何模型之前,先启动会话。 | 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. 这个适配器使用另一个PHP缓存(APC)来存储表元数据。您可以使用选项指定元数据的生命周期。当应用程序处于生产阶段时,这是最推荐的存储元数据的方法。 | 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. 这个适配器使用XCache来存储表元数据。您可以使用选项指定元数据的生命周期。当应用程序处于生产阶段时,这是最推荐的存储元数据的方法。 | 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. 该适配器使用普通文件存储元数据。通过使用这个适配器,磁盘读取增加了,但是数据库访问减少了。 | Phalcon\Mvc\Model\MetaData\Files |

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

作为其他ORM的依赖项,从服务容器请求元数据管理器:

~~~

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;

};

~~~

#### 元数据策略(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.

正如上面提到的,获取模型元数据的默认策略是数据库内省。在这个策略中,信息模式用于了解表中的字段、它的主键、可空字段、数据类型等。

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

您可以以下方式更改默认的元数据内省:

~~~

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;

};

~~~

#### 数据库内部策略(Database Introspection Strategy)

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

此策略不需要任何定制,并且被所有元数据适配器隐式地使用。

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

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

该策略使用注释来描述模型中的列:

~~~

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.

注释必须放在映射到映射源中的列的属性中。没有@column注释的属性被处理为简单的类属性。

The following annotations are supported:

下面的注释得到了支持:

| Name 名字 | Description 描述 |

| --- | --- |

| Primary | Mark the field as part of the table’s primary key 将字段标记为表的主键的一部分 |

| Identity | The field is an auto_increment/serial column 该字段是一个自动递增/串行列 |

| Column | This marks an attribute as a mapped column 它将一个属性标记为一个映射的列 |

The annotation @Column supports the following parameters:

@column的注释支持以下参数:

| Name | Description 描述 |

| --- | --- |

| type | The column’s type (string, integer, decimal, boolean) 列的类型(字符串、整数、小数、布尔) |

| length | The column’s length if any 列的长度如果有的话 |

| nullable | Set whether the column accepts null values or not 设置该列是否接受null值 |

The annotations strategy could be set up this way:

注释策略可以这样设置:

~~~

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;

};

~~~

#### 自定义元数据(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.

如果没有开发人员必须手动使用上面介绍的任何一种内省策略,那么就可以自动为每个模型获取元数据。

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.

开发人员还可以手动定义元数据。该策略覆盖了元数据管理器中的任何策略。从映射表中添加/修改/删除的新列必须被添加/修改/删除,以便所有的工作都能正常工作。

The following example shows how to define the metadata manually:

下面的例子展示了如何手动定义元数据:

~~~

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,

],

);

}

}

~~~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/550979.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

matlab函数冒号代表的意思,MATLAB中冒号运算符的含义

实际上a:b生成一个向量.您可以仅将其用作索引,因为(…)也接受列表,例如octave-3.0.3:10> a [1,4,7]a 1 4 7octave-3.0.3:11> b [1,4,9,16,25,36,49]b 1 4 9 16 25 36 49octave-3.0.3:12> b(a) # gets [b(1), b(4), b(7)]ans 1 16 49现在,a:b&…

ubuntu安装matlab空间不足,Ubuntu安装Matlab方法及命令

操作系统:Ubuntu 10.04matlab版本:Mathworks.Matlab.R2010a.UNIX注意:软件安装后会占用大量硬盘空间,约4G.软件Mathworks.Matlab.R2010a.UNIX一、软件安装1.右键 Mathworks.Matlab.R2010a.UNIX.iso ,解压缩到此处。2.在…

java怎么让1的数据2可以拥有,【如何让代码变“高级”(二)】-这样操作值得一波666(Java Stream)(这么有趣)...

“致"高级"工程师(BUG工程师)一颗折腾的心原创不易&#xff0c;点个赞&#x1f497;&#xff0c;支持支持开发中的代码在开发中的代码是不是很常见这样的代码&#xff1a;这样的?for循环取元素取值List szUserList new ArrayList<>();for (User user : userL…

网易云信短信接口java,调用网易云短信验证码接口Demo

最近在开发新的项目&#xff0c;因为需要使用验证码验证这个功能。我选择的是 网易云 的验证码接口。免费使用20条。并且在正式使用的过程中&#xff0c;对比了很多家以后&#xff0c;感觉还是他家的便宜。因为随着你购买的短信包数量的增加&#xff0c;价钱会相应的降低&#…

php+页面加载进度,基于jQuery实现模拟页面加载进度条_jquery

因为我们无法通过任何方法获取整个页面的大小和当前加载了多少&#xff0c;所以想制作一个加载进度条的唯一办法就是模拟。那要怎么模拟呢&#xff1f;我们知道&#xff0c;页面是从上往下执行的&#xff0c;也就是说我们可以大致估算出在页面的某个位置加载了多少&#xff0c;…

php eurl.axd,Http异常eurl.axd出错信息解决方法

您可能感兴趣的话题&#xff1a;IIS核心提示&#xff1a;在IIS6中同时启用了ASP.NET 2.0 和 ASP.NET 4.0 后&#xff0c;网站程序可能会出现如下错误&#xff1a;“ System.Web.HttpException: Path ‘//eurl.axd/‘ was not found. ”在IIS6中同时启用了ASP.NET 2.0 和 ASP.NE…

php radio js,如何使用JavaScript设置radio选中的示例

在页面数据绑定时&#xff0c;经常会遇到给radio设置选中&#xff0c;以下是我写的js方法&#xff0c;经测试可以使用。欢迎拍砖是否是否$(function(){$("#btn1").click(function(){$("input[namerdo1]").eq(0).attr("checked","checked&qu…

oracle 列 连续,oracle中某列连续相同值的记录数统计(一个简单的例子)

oracle中某列连续相同值的记录数统计(一个简单的例子) row_number() OVER (PARTITION BY COL1 ORDER BY COL2) 表示根据COL1分组&#xff0c;在分组内部根据 COL2排序&#xff0c;而此函数计算的值就表示每组内部排序后的顺序编号(组内连续的唯一的).与rownum的区别在于&#x…

oracle ora31633,ORA-31633: unable to create master table

ORA-31626: job does not existORA-31633: unable to create master table "NEWCOURSE.JOB_48"ORA-06512: at "SYS.DBMS_SYS_ERROR", line 95ORA-06512: at "SYS.KUPV$FT", line 1020ORA-00955: name is already used by an existing object同步…

a表剔除b表 oracle,删除a表中和b表相同的数据

删除a表中和b表相同的数据删除a表中和b表相同的数据软件环境&#xff1a;1、Windows NT4.0ORACLE 8.0.42、ORACLE安装路径为&#xff1a;C:&#xff3c;ORANT问题提出&#xff1a;1、在做数据转储业务的时候&#xff0c;如果发生操作错误&#xff0c;有可能出现主表和副表中都有…

nifi将hive同步到oracle,NiFi使用总结 一 hive到hive的PutHiveStreaming processor和SelectHiveQL...

我说实话&#xff0c;NiFi的坑真的挺多的。。。1、PutHiveStreaming processor的使用该控制器配置需要hive启用事物&#xff1b;且目前只支持orc格式&#xff0c;且建表需要分桶&#xff0c;开启事务等&#xff0c;建表示例如下&#xff1a;create tabletest_trancaction(user_…

rds oracle,Amazon RDS Oracle数据库托管

您可通过两种不同的许可模式运行 Amazon RDS for Oracle&#xff0c;即“附带许可”和“使用自有许可 (BYOL)”。在“附带许可”服务模型中&#xff0c;您无需单独购买 Oracle 许可&#xff1b;Oracle 数据库软件软件由 AWS 提供授权许可。“附带许可”的起价为 0.04 USD/小时&…

oracle监听系统账号,linux 下 Oracle 监控sysdba用户登陆

在unix平台的Oracle数据库产品中&#xff0c;每次当用户以sysdba权限登陆数据库时&#xff0c;系统就自动创建一个名为ora_.aud的文件&#xff0c;该文件默认在$ORACLE_HOME/rdbms/audit目录下。该文件的自动创建根本不需要系统打开审计功能。在这个文件中记录了连接的用户&…

linux目录下有斜杠,Windows和Linux路径中斜杠/和反斜杠\ 的区别

Unix使用斜杆/ 作为路径分隔符&#xff0c;而web应用最新使用在Unix系统上面&#xff0c;所以目前所有的网络地址都采用 斜杆/ 作为分隔符。Windows由于使用 斜杆/ 作为DOS命令提示符的参数标志了&#xff0c;为了不混淆&#xff0c;所以采用 反斜杠\ 作为路径分隔符。所以目前…

linux密码带星号,Linux下实现输入密码以星号显示

#include #include #include #include #include #include char Getch(){int c 0;int res 0;struct termios org_opts, new_opts;res tcgetattr(STDIN_FILENO, &org_opts); //用于获取与终端相关的参数if(res -1){printf("tcgetattr error! Error code: %d&#xf…

linux内核网络raw_cpu_add,深入理解Linux网络技术内幕-设备注册和初始化(四)

static void rollback_registered_many(struct list_head *head){struct net_device *dev, *tmp;BUG_ON(dev_boot_phase);ASSERT_RTNL(); //检查是否获取了rtnl互斥量list_for_each_entry_safe(dev, tmp, head, unreg_list) {/* Some devices call without registering* for i…

linux通过时间查询日志,linux按时间查询日志

在系统应用集中部署的时候&#xff0c;很多日志因为太多难以定位&#xff0c;获取某段时间的日志是对运维人员非常关键的事情。一、sed查看某时间段到现在的系统日志&#xff1a;sed -n /May 20 17/,$p /var/log/messages | less二、sed 截选时间段日志首先看一下日志的格…

telnet服务下载 Linux,linux telnet服务安装包

这是linux telnet服务安装包下载&#xff0c; telnet-client 客户端安装包、telnet-server服务端安装包和xinetd依赖包&#xff0c;本人在linux retHat 32位系统上亲自安装过&#xff0c;若您依旧安装不成功&#xff0c;没关系&#xff0c;在附赠.txt中&#xff0c;打开这个链接…

linux挂载硬盘的分区创建,Linux 新增硬盘、新建分区、格式化硬盘、挂载硬盘的操作...

今天学校有一台机器发现有块硬盘没有挂载&#xff0c;然后叫我挂载一下&#xff0c;这里记录一下 Linux 下新增硬盘分区、格式化硬盘、挂载硬盘的操作。查看当前硬盘首先我们查看一下当前的硬盘配置。使用命令sudo fdisk -l就可以看到目前的硬盘了。可以看到有块空的 sda(这里忘…

Win10 Linux GPT分区方案,win10+Ubuntu 20.04 LTS双系统安装(UEFI + GPT)(图文,多图预警)

win10 安装(已安装的略过)制作启动u盘插入U盘&#xff0c; 运行 rufus-3.10.exe&#xff0c;按照下面选择&#xff0c;然后点击开始&#xff0c;等待完成即可为Ubuntu安装空出分区此电脑->管理->磁盘管理&#xff0c;选择一个磁盘右键选择压缩卷&#xff0c;压缩出50G以上…