【问题标题】:How can I get the className of my table in cakephp 3?如何在 cakephp 3 中获取我的表的类名?
【发布时间】:2023-03-03 09:56:02
【问题描述】:

在我的 AcosTable.php 中有

$this->hasMany('ChildAcos', [
    'alias' => 'ChildAcos',
    'className' => 'Acos',
    'foreignKey' => 'parent_id'
]);

我需要 appController 中的表名(className 属性)。在我的 appController 我有

$associations = $this->{$this->modelClass}->associations();
foreach ($associations->type('HasMany') as $item) {
    $options['name'] = $item->name();             //ChildAcos
    $options['foreignKey'] = $item->foreignKey(); //parent_id
    //$options['className'] = $item->?();         //Acos
    $hasMany[] = $options;
}

如何检索类名?

【问题讨论】:

    标签: associations cakephp-3.0


    【解决方案1】:

    与所有其他关联选项相反,似乎没有办法获取Association::$_className 的值,您可能想在GitHub 上报告此问题,我认为这样做不会有什么坏处这也可以访问(至少可读)。

    目前看来,您所能做的就是从目标表的完整类名中找出它,例如:

    $fqn = get_class($item->target());
    $parts = namespaceSplit($fqn);
    $className = substr(end($parts), 0, -5);
    

    【讨论】:

    • 谢谢@ndm。我试试这个。 {$this->modelClass}->association(); $fqn = get_class($association->target()); $parts = namespaceSplit($fqn); $className = substr(end($parts), 0, -5);公关($类名); >> 但是我遇到了这个错误>。我也把问题放在github上,他们建议做这样的事情 target()->registryAlias(); >> 这会产生类似的错误:(
    • 1.如何自动为关联()提供参数? 2. get_class 返回不包含类名的 Cake\ORM\Table
    • @anghazighermezi 请不要指望我喂你,这实际上只是编程 101。该方法需要一个参数,你必须提供它,如果你打算使用它。此外,您在此处显示的代码与您的问题中的代码不同。
    • @anghazighermezi registryAlias() 将不起作用,因为目标表正在使用关联中指定的别名进行注册。当get_class() 返回Cake\ORM\Table 时,这意味着您正在引用一个不存在实际类的表,TableRegistry::get() 在这种情况下将返回一个基于\Cake\ORM\Table (get_class(TableRegistry::get('MajorBeeForPresident'))) 的神奇创建的表。跨度>
    • 谢谢@ndm。如果我不能清楚地表达我的目的,我深表歉意。我弄错了(关联而不是关联:)
    猜你喜欢
    • 1970-01-01
    • 2011-08-15
    • 2015-07-01
    • 1970-01-01
    • 2014-04-28
    • 2015-11-13
    • 2015-12-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多