<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # 模型元數據(Models Meta-Data) # 模型元數據(Models Meta-Data) To speed up development [*Phalcon\\Mvc\\Model*](#) helps you to query fields and constraints from tablesrelated to models. To achieve this, [*Phalcon\\Mvc\\Model\\MetaData*](#) is available to manageand cache table meta-data. Sometimes it is necessary to get those attributes when working with models. You can get a meta-data instance as follows: ``` <pre class="calibre14">``` <?php $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 Meta-Data) Once the application is in a production stage, it is not necessary to query the meta-data of the table from the database system eachtime you use the table. This could be done caching the meta-data using any of the following adapters: AdapterDescriptionAPIMemoryThis adapter is the default. The meta-data is cached only during the request. When the request is completed, the meta-data 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 meta-data in each request containing the new and/or modified fields.[*Phalcon\\Mvc\\Model\\MetaData\\Memory*](#)SessionThis adapter stores meta-data in the $\_SESSION superglobal. This adapter is recommended only when the application is actually using a small number of models. The meta-data are refreshed every time a new session starts. This also requires the use of session\_start() to start the session before using any models.[*Phalcon\\Mvc\\Model\\MetaData\\Session*](#)ApcThis adapter uses the [Alternative PHP Cache (APC)](http://www.php.net/manual/en/book.apc.php) to store the table meta-data. You can specify the lifetime of the meta-data with options. This is the most recommended way to store meta-data when the application is in production stage.[*Phalcon\\Mvc\\Model\\MetaData\\Apc*](#)XCacheThis adapter uses [XCache](http://xcache.lighttpd.net/) to store the table meta-data. You can specify the lifetime of the meta-data with options. This is the most recommended way to store meta-data when the application is in production stage.[*Phalcon\\Mvc\\Model\\MetaData\\Xcache*](#)FilesThis adapter uses plain files to store meta-data. 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: ``` <pre class="calibre14">``` <?php use Phalcon\Mvc\Model\MetaData\Apc as ApcMetaData; $di['modelsMetadata'] = function () { // Create a meta-data manager with APC $metaData = new ApcMetaData( array( "lifetime" => 86400, "prefix" => "my-prefix" ) ); return $metaData; }; ``` ``` ### 元數據策略(Meta-Data Strategies) As mentioned above the default strategy to obtain the model's meta-data is database introspection. In this strategy, the informationschema is used to know the fields in a table, its primary key, nullable fields, data types, etc. You can change the default meta-data introspection in the following way: ``` <pre class="calibre14">``` <?php use Phalcon\Mvc\Model\MetaData\Apc as ApcMetaData; $di['modelsMetadata'] = function () { // Instantiate a meta-data adapter $metaData = new ApcMetaData( array( "lifetime" => 86400, "prefix" => "my-prefix" ) ); // Set a custom meta-data 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 meta-data adapters. ### 注釋策略(Annotations Strategy) This strategy makes use of [*annotations*](#) to describe the columns in a model: ``` <pre class="calibre14">``` <?php 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 annotationare handled as simple class attributes. The following annotations are supported: NameDescriptionPrimaryMark the field as part of the table's primary keyIdentityThe field is an auto\_increment/serial columnColumnThis marks an attribute as a mapped columnThe annotation @Column supports the following parameters: NameDescriptiontypeThe column's type (string, integer, decimal, boolean)lengthThe column's length if anynullableSet whether the column accepts null values or notThe annotations strategy could be set up this way: ``` <pre class="calibre14">``` <?php use Phalcon\Mvc\Model\MetaData\Apc as ApcMetaData; use Phalcon\Mvc\Model\MetaData\Strategy\Annotations as StrategyAnnotations; $di['modelsMetadata'] = function () { // Instantiate a meta-data adapter $metaData = new ApcMetaData( array( "lifetime" => 86400, "prefix" => "my-prefix" ) ); // Set a custom meta-data database introspection $metaData->setStrategy(new StrategyAnnotations()); return $metaData; }; ``` ``` ### 自定義元數據(Manual Meta-Data) Phalcon can obtain the metadata for each model automatically without the developer must set them manuallyusing any of the introspection strategies presented above. The developer also has the option of define the metadata manually. This strategy overridesany strategy set in the meta-data manager. New columns added/modified/removed to/from the mappedtable must be added/modified/removed also for everything to work properly. The following example shows how to define the meta-data manually: ``` <pre class="calibre14">``` <?php 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 => array( 'id', 'name', 'type', 'year' ), // Every column part of the primary key MetaData::MODELS_PRIMARY_KEY => array( 'id' ), // Every column that isn't part of the primary key MetaData::MODELS_NON_PRIMARY_KEY => array( 'name', 'type', 'year' ), // Every column that doesn't allows null values MetaData::MODELS_NOT_NULL => array( 'id', 'name', 'type' ), // Every column and their data types MetaData::MODELS_DATA_TYPES => array( '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 => array( '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 => array( '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 => array( 'year' => true ), // Fields that must be ignored from UPDATE SQL statements MetaData::MODELS_AUTOMATIC_DEFAULT_UPDATE => array( 'year' => true ), // Default values for columns MetaData::MODELS_DEFAULT_VALUES => array( 'year' => '2015' ), // Fields that allow empty strings MetaData::MODELS_EMPTY_STRING_VALUES => array( 'name' => true ) ); } } ``` ``` | - [索引](# "總目錄") - [下一頁](# "事務管理(Model Transactions)") | - [上一頁](# "使用模型(Working with Models)") |
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看