【发布时间】:2016-09-09 13:56:04
【问题描述】:
我现在需要处理 3 个数据库表。域表、标签表和数据透视表。在我的数据透视表中,只有两个“主表”的 2 个外键。 domains_id 和 tags_id 是两个外键。
我在这里按照此页面上的介绍进行操作: http://laraveldaily.com/pivot-tables-and-many-to-many-relationships/
但我仍然不明白“管理多对多关系:附加分离同步”部分。
我的标签控制器代码是:
$id = Input::get('id');
$request = $request->tagging;
$tags = explode(',', $request);
$all_tags = [];
foreach ($tags as $tag) {
$tag = trim($tag); // entfernen von leerstellen
$friendly_tags = Str::slug($tag); // user friendly tags
if (Str::length($friendly_tags)) {
$all_tags[] = Tags_Domains::create([ 'name' => $friendly_tags ]);
}
}
$domain = Domains::query()->findOrFail($id);
$domain->tags()->saveMany($all_tags);
在函数的第一行,我得到了域的 ID。此 ID 应保存在我的数据透视表的 domain_id 属性中。
在这一行之后,我格式化用户想要添加的标签并将它们保存到我的 $all_tags 数组中。例如:
$all_tags = [sunny', 'fitness', 'healthy'];
现在我将它们保存在我的标签表中:
Tags_Domains::insert($all_tags);
现在我想将这些标签 ID 保存在我的数据透视表的 tags_id 属性中。我仍然不知道这是什么样子。 laravel 文档。真的没有帮助。
我的标签模型中的现实:
public function domains() { return $this->belongsToMany('App\Models\technical\Domains', 'domain_tag', 'id', 'domains_id'); }
我在我的领域模型中的实现:
public function tags() { return $this->belongsToMany('App\Models\technical\Tags_Domains', 'domain_tag', 'id', 'tags_id'); }
【问题讨论】:
-
您不需要 Tags_Domains 模型,您应该只需要定义了多对多关系的 Tag 和 Domain 模型。查看文档laravel.com/docs/5.1/eloquent-relationships#many-to-many
-
我已经添加了我的问题。我删除了枢轴模型并将问题底部的行添加到我的域模型中。 -- 但我还是不太明白怎么用..
标签: php laravel laravel-5 eloquent pivot-table