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

CakePHP:如何从实体类内部加载关联数据?,php,cakephp,Php,Cakephp,假设我有一个AuthorsTable,其中定义了一个与Articles表的许多关联,定义如下: // In the initialize function of the AuthorsTable class. $this->belongsToMany('Articles', ['joinTable' => 'authors_articles'] ); 我认为连接的性质与问题无关,只是为了提供完整的上下文 现在,我有一个$author实体,它被传递给我的函数,但没有加载相关的

假设我有一个AuthorsTable,其中定义了一个与Articles表的许多关联,定义如下:

// In the initialize function of the AuthorsTable class.
$this->belongsToMany('Articles',
    ['joinTable' => 'authors_articles']
);
我认为连接的性质与问题无关,只是为了提供完整的上下文

现在,我有一个$author实体,它被传递给我的函数,但没有加载相关的数据,也就是说,它是使用类似$author=$authorsTable->get19;的东西创建的;,因此,它只有authors表中的信息,而不是articles表中的信息


是否有某种实体功能,我可以在其中加载相关数据,即实体创建后的文章数据?

已经结束了,我不知道它是否对您仍然重要,但对其他人可能重要。 您可以使用模型的loadInto,也可以使用文档中提到的延迟加载插件

您可以在此处找到该插件:

该插件可以同时使用这两种方法!如果您更喜欢即时加载,可以更快地使用contain NORMAL。否则,关联将按需加载以节省内存


就我个人而言,我更喜欢即时加载,但如果团队中的另一名成员因为无知而忘记加载关联,我会使用延迟加载插件。

事情有点结束了,我不知道这对你是否仍然重要,但对其他人来说可能更重要。 您可以使用模型的loadInto,也可以使用文档中提到的延迟加载插件

您可以在此处找到该插件:

该插件可以同时使用这两种方法!如果您更喜欢即时加载,可以更快地使用contain NORMAL。否则,关联将按需加载以节省内存


就个人而言,我更喜欢即时加载,但如果团队中的另一名成员因为无知而忘记加载关联,则使用延迟加载插件。

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

TableRegistry::get($this->source())->loadInto($this, ['Articles']);
AuthorsTable方法中的相同代码:

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

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

TableRegistry::get($this->source())->loadInto($this, ['Articles']);
AuthorsTable方法中的相同代码:

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

您可以使用contain来获取相关数据。您可以指定使用哪个CakePHP版本吗?@ManoharKhadka-我是说从实体内部。除了table类的find方法之外,我似乎找不到让contain工作的方法。@Samhequet是本文撰写时最新的一个-3.4。从一开始就不能这样创建变量:$author=$authorsTable->get19,['contain'=>['articles']];您可以使用contain来获取相关数据。您可以指定使用哪个CakePHP版本吗?@ManoharKhadka-我是说从实体内部。除了table类的find方法之外,我似乎找不到让contain工作的方法。@Samhequet是本文撰写时最新的一个-3.4。从一开始就不能这样创建变量:$author=$authorsTable->get19,['contain'=>['articles']];