如何从行为中的事件获取tablename

时间:2015-08-12 14:10:35

标签: cakephp-3.0

我正在CakePHP 3.0.11中编写一个行为,我可以在我的行为的beforeSave()方法中使用var_dump()和Log :: debug()$ event对象,并且可以看到对象数据,但无法访问对象的属性。 我只是想从对象中获取表(别名,className,tablename,any)名称 我想在我的行为中做这样的事情:

public function beforeSave(Event $event, Entity $entity)
{
    $table = $event->_alias;
    // etc.
}

我尝试了事件的subject()方法,该方法从事件中提取表对象,

$table = $event->subject();

当我var_dump或调试返回的对象时,它显示:

Debug: App\Model\Table\CompaniesTable Object
(
    [registryAlias] => Companies
    [table] => companies
    [alias] => Companies
    [entityClass] => App\Model\Entity\Company
    [associations] => Array
        (
            [0] => defaultshippingusers
    (...)
    [defaultConnection] => default
    [connectionName] => default
)

但我无法从我的$ table对象访问'table','alias'等。 当我这样做时,我得到一个致命的错误:

  

表公司与“别名”无关

是否有一种简单的方法可以从行为中的$ event对象中获取Table名称?

2 个答案:

答案 0 :(得分:7)

转储对象不一定能为您提供对象结构的表示,而是通过the magic __debugInfo() method定义的自定义格式化调试信息。

<强> https://github.com/cakephp/cakephp/blob/3.0.11/src/ORM/Table.php#L2190

Table个类没有tablealias属性,但具有相同名称的方法只需查看Cookbook和API文档。

$alias = $event->subject()->alias();

答案 1 :(得分:0)

您还可以直接从行为中获取表名或别名,而无需使用$ event对象:

$this->getTable()->table();
$this->getTable()->alias();

如果您将自己的函数添加到未传递$ event的行为中,这将非常有用。