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