CakePHP 3.x - 通过一个模型链接并保存与 3 个模型的关联



我正在使用CakePHP版本3.x。

我需要通过一个模型(跟踪器文章提及(链接三个模型(跟踪器,文章提及(。

这是我的关系定义:

跟踪器表.php

$this->belongsToMany('Mentions', [
'through' => 'TrackersArticlesMentions',
'saveStrategy' => 'append',
]);
$this->belongsToMany('Articles', [
'through' => 'TrackersArticlesMentions',
'saveStrategy' => 'append',
]);

文章表.php

$this->belongsToMany('Mentions', [
'through' => 'TrackersArticlesMentions',
'saveStrategy' => 'append',
]);
$this->belongsToMany('Trackers', [
'through' => 'TrackersArticlesMentions',
'saveStrategy' => 'append',
]);

提及表.php

$this->belongsToMany('Articles', [
'through' => 'TrackersArticlesMentions',
'saveStrategy' => 'append',
]);
$this->belongsToMany('Trackers', [
'through' => 'TrackersArticlesMentions',
'saveStrategy' => 'append',
]);

跟踪器文章提及表.php

$this->belongsTo('Trackers', [
'foreignKey' => 'tracker_id',
'joinType' => 'INNER'
]);
$this->belongsTo('Articles', [
'foreignKey' => 'article_id',
'joinType' => 'INNER'
]);
$this->belongsTo('Mentions', [
'foreignKey' => 'mention_id',
'joinType' => 'INNER'
]);

到目前为止,当我想找到我的数据并包含(又名包含(它们时,一切都运行良好。

不幸的是,当我想链接它们时,我应该能够使用函数链接并执行以下操作:

$this->Trackers->link($trackerEntity, [$articleEntity, $mentionEntity]);

但它不起作用,函数链接期望作为第二个参数:

属于该协会target方的实体名单

我可能是错的,但该函数似乎只链接两个实体,第二个参数只是同一实体的数组......

我通过在跟踪器文章提及表中创建一个函数找到了解决方案,如下所示:

public function createLink(AppModelEntityTracker $trackerEntity, AppModelEntityArticle $articleEntity, AppModelEntityMention $mentionEntity)
{
return $this->findOrCreate([
'tracker_id' => $trackerEntity->get('id'),
'article_id' => $articleEntity->get('id'),
'mention_id' => $mentionEntity->get('id'),
]);
}

但我想"正确地"做到这一点。 有人有什么建议吗? 谢谢!

link()方法是将单个关联源端实体链接到多个(通常是不同的(关联目标端实体,例如,将单个Post链接到多个Tag,这将通过Tags关联来完成。

因此,这意味着通过$this->Trackers->link()(我假设$this是一个表对象,因此$this->Trackers是一个关联对象(,您可以将单个MentionArticle链接到多个(不同的(Tracker

不支持您想到的link()的使用,因此您必须使用您提出的解决方案之类的东西,例如自己创建和保存TrackersArticlesMention实体 - 这样做完全没问题。

相关内容

  • 没有找到相关文章

最新更新