如何实例化模型并获取已在实例中声明的所有列?
$modelA = User::findFirst();
echo $modelA->id; //OK
$modelB = new User();
echo $modelA->id; //Id is undeclared causing errors instead of returning blank
目前我需要手动声明事件onConstruct
中的模型列,但我想使用database introspection策略并在使用{{1时获取从表模式模式声明的属性}}
任何人都知道可以帮助我的东西吗?!
答案 0 :(得分:2)
尝试page上提到的注释策略。
所以,像
class Test extends \Phalcon\Mvc\Model
{
/**
* @Primary
* @Identity
* @Column(type="integer", nullable=false)
*/
public $id;
...
从服务容器中获取元数据适配器的实例:
<?php
use Phalcon\Mvc\Model\MetaData\Apc as ApcMetaData,
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"
));
获取模型的列,如下所示:
<?php
$test = new Test();
// Get Phalcon\Mvc\Model\Metadata instance
$metaData = $test->getModelsMetaData();
// Get fields names
$attributes = $metaData->getAttributes($test);
print_r($attributes);
// Get fields data types
$dataTypes = $metaData->getDataTypes($test);
print_r($dataTypes);
以上所有内容均可在链接中找到。
另请查看MetaData APIs。
希望有所帮助。