<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之旅 廣告
                [TOC] # 模型元數據 為了加速開發,`Phalcon\Mvc\Model` 可以幫助您查詢與模型相關的表中的字段和約束。為此,`Phalcon\Mvc\Model\MetaData` 可用于管理和緩存表元數據。 有時在使用模型時需要獲取這些屬性。您可以按如下方式獲取元數據實例: ```php <?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); ``` ## 緩存元數據 一旦應用程序處于生產階段,就不必在每次使用表時從數據庫系統中查詢表的元數據。這可以使用以下任何適配器來緩存元數據: | 適配器 | 描述 | API | | ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | --------------------------------------------- | | Apc | 此適配器使用[Alternative PHP Cache (APC)](http://www.php.net/manual/en/book.apc.php)來存儲表元數據。您可以使用選項指定元數據的生存期。(推薦用于生產)。 | `Phalcon\Mvc\Model\MetaData\Apc` | | Files | 此適配器使用純文件來存儲元數據。此適配器可減少數據庫查詢,但文件系統的I/O增加。 | `Phalcon\Mvc\Model\MetaData\Files` | | Libmemcached | 此適配器使用[Memcached Server](https://www.memcached.org/)來存儲表元數據。服務器參數以及緩存生存期在選項中指定。(推薦用于生產) | `Phalcon\Mvc\Model\MetaData\Libmemcached` | | Memcache | 此適配器使用[Memcache](http://php.net/manual/en/book.memcache.php)存儲表元數據。您可以使用選項指定元數據的生存期。(推薦用于生產) | `Phalcon\Mvc\Model\MetaData\Memcache` | | Memory | 此適配器是默認值。僅在請求期間緩存元數據。請求完成后,元數據將作為請求的正常內存的一部分釋放。(推薦用于開發) | `Phalcon\Mvc\Model\MetaData\Memory` | | Redis | 此適配器使用[Redis](https://redis.io/)存儲表元數據。服務器參數以及緩存生存期在選項中指定。(推薦用于生產)。 | `Phalcon\Mvc\Model\MetaData\Redis` | | Session | 此適配器將元數據存儲在`$_SESSION`超全局中。僅當應用程序實際使用少量模型時,才建議使用此適配器。每次新會話開始時都會刷新元數據。這還需要使用 `session_start()` 在使用任何模型之前啟動會話。 | `Phalcon\Mvc\Model\MetaData\Session` | | XCache | 此適配器使用[XCache](http://xcache.lighttpd.net/)存儲表元數據。您可以使用選項指定元數據的生存期。這是在應用程序投入生產時存儲元數據的推薦方法之一。 | `Phalcon\Mvc\Model\MetaData\Xcache` | 與其他ORM的依賴項一樣,從服務容器請求元數據管理器: ```php <?php 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; }; ``` ## 元數據策略 如上所述,獲取模型元數據的默認策略是數據庫內部。在此策略中,信息模式用于了解表中的字段,主鍵,可空字段,數據類型等。 您可以通過以下方式更改默認元數據內省: ```php <?php 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; }; ``` ### 數據庫內省策略 此策略不需要任何自定義,并且由所有元數據適配器隱式使用。 ### 注解策略 此策略使用注釋`annotations <annotations>`來描述模型中的列: ```php <?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; } ``` 注解必須放在映射到映射源中的列的屬性中。沒有`@Column`注解的屬性將作為簡單的類屬性處理。 支持以下注解: | 名稱 | 描述 | | -------- | ------------------------------------------------- | | Primary | 將該字段標記為表的主鍵的一部分 | | Identity | 該字段是auto_increment/serial列 | | Column | 這將屬性標記為映射列 | 注解`@Column`支持以下參數: | 名稱 | 描述 | | -------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | column | 真正的列名 | | type | 列的類型:varchar/string(默認值),text,char,json,tinyblob,blob,mediumblob,longblob,integer,biginteger,float,decimal,date,datetime,timestamp,boolean| | length | 列的長度(如果有) | | nullable | 設置列是否接受null值 | | skip_on_insert | 在插入時跳過此列 | | skip_on_update | 在更新時跳過此列 | | allow_empty_string | 列允許空字符串 | | default | 默認值 | 注解策略可以這樣設置: ```php <?php 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; }; ``` ## 手動定義元數據 Phalcon可以自動獲取每個模型的元數據,而開發人員必須使用上面提到的任何內省策略手動設置它們。 開發人員還可以選擇手動定義元數據。此策略將覆蓋元數據管理器中設置的任何策略。必須添加/修改/刪除在映射表中添加/修改/刪除的新列,以使一切正常工作。 以下示例顯示如何手動定義元數據: ```php <?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 => [ '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, ], ); } } ```
                  <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>

                              哎呀哎呀视频在线观看