CakePHP:如何从实体类中加载关联数据?

时间:2017-08-09 21:43:23

标签: php cakephp

假设我有一个AuthorsTable,其定义的“属于许多”与Article表定义如下:

// In the initialize function of the AuthorsTable class.
$this->belongsToMany('Articles',
    ['joinTable' => 'authors_articles']
);

(我不认为联接的性质与问题有关,只是为了提供完整的背景。)

现在,我有一个$author实体传递给我的函数,该实体没有加载相关数据(即,它是使用$author = $authorsTable->get(19);之类的东西创建的,所以它只是拥有authors表中的信息,而不是articles表中的信息。

是否存在某种实体函数,我可以在其中加载相关数据,即实体已经创建后的articles数据

2 个答案:

答案 0 :(得分:1)

它有点过了,我不知道它对你来说是否仍然很重要,但也许对其他人而言。 您可以使用模型的loadIntohttps://book.cakephp.org/3.0/en/orm/retrieving-data-and-resultsets.html#loading-additional-associations),也可以使用文档中提到的延迟加载插件(https://book.cakephp.org/3.0/en/orm/entities.html#lazy-loading-associations

你可以在这里找到插件: https://github.com/jeremyharris/cakephp-lazyload

该插件适用于这两种方法!如果您更喜欢预先加载,则可以使用contain(通常更快)。否则,关联将“按需”加载(节省内存)。

就个人而言,我更喜欢急切加载,但如果团队的其他成员(出于无知)忘记加载协会,则使用延迟加载插件

答案 1 :(得分:1)

chriss的回答建议使用loadInto。对于CakePHP 3,您在任何作者实体方法中需要的PHP是:

TableRegistry::get($this->source())->loadInto($this, ['Articles']);

AuthorsTable方法中的相同代码:

$this->loadInto($author, ['Articles']);