如何在CakePHP组件中使用TableRegistry?

rks48beu  于 2023-10-20  发布在  PHP
关注(0)|答案(2)|浏览(145)

我是cakephp的新手,正在尝试使用cakephp version 4.0.7创建一个组件。
在组件中,我需要将数据保存在一个表中。我已经按照这个文档插入数据
在组件中,我尝试了下面的代码注册表我的表

use Cake\ORM\Locator\LocatorAwareTrait;

class MyComponent extends Component{

    public function foo()
    {
         $ProductsTable = $this->getTableLocator()->get('Products');
    }

}

在输出中,我得到下面的异常

Call to undefined method App\Controller\Component\MyComponent::getTableLocator()

我该如何解决这个问题?

cngwdvgl

cngwdvgl1#

CakePHP 4.0.x

$productsTable = \Cake\ORM\TableRegistry::getTableLocator()->get('Products');

来自CakePHP 4.1

Cake\ORM\TableRegistry已弃用。使用Cake\ORM\ORM\LocatorAwareTrait::getTableTrait()或Cake\Datasheet\FactoryTrait::get('Table')
阅读https://book.cakephp.org/4/en/appendices/4-1-migration-guide.html#orm

并尝试使用FactoryList:

use Cake\Datasource\FactoryLocator;

$productsTable = FactoryLocator::get('Table')->get('Products');

//$productsTable->find()...

或在组件类中注入trait

class MyComponent extends Component{

    use Cake\ORM\Locator\LocatorAwareTrait;

    public function foo()
    {
         $ProductsTable = $this->getTableLocator()->get('Products');
    }

}
mf98qq94

mf98qq942#

Salines answere在Cakephp 4.3.x中仍然有效
我测试了它,它在我的组件工作!

class MyComponent extends Component{

    use Cake\Datasource\FactoryLocator;

    public function foo()
    {  
        $ProductsTable = FactoryLocator::get('Table')->get('ProductsTable ');
    }

}

相关问题