假设我有一个AuthorsTable,其定义的“属于许多”与Article表定义如下:
// In the initialize function of the AuthorsTable class.
$this->belongsToMany('Articles',
['joinTable' => 'authors_articles']
);
(我不认为联接的性质与问题有关,只是为了提供完整的背景。)
现在,我有一个$author
实体传递给我的函数,该实体没有加载相关数据(即,它是使用$author = $authorsTable->get(19);
之类的东西创建的,所以它只是拥有authors
表中的信息,而不是articles
表中的信息。
是否存在某种实体函数,我可以在其中加载相关数据,即实体已经创建后的articles
数据?
答案 0 :(得分:1)
它有点过了,我不知道它对你来说是否仍然很重要,但也许对其他人而言。
您可以使用模型的loadInto
(https://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']);