2016-05-13 87 views
0

我现在需要使用3个DB表格。一个domains-table,一个tags-table和一个pivot-table。在我的数据透视表中,只有两个“主表”中的两个foreign_keys。 domains_idtags_id是两个外键。使用Laravel编辑pivot平板电脑?

我跟着这个页面上的介绍就在这里: 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应该保存在我的数据透视表中的domains_id属性中。

在这一行之后,我格式化用户想要添加的标签并将它们保存到我的$ all_tags数组中。例如:

$all_tags = [sunny', 'fitness', 'healthy']; 

现在,我与它们保存在我的标签表:

Tags_Domains::insert($all_tags); 

现在,我要保存这些标签的ID在我的透视表中的tags_id属性。我仍然不知道这是怎么回事。 laravel doc。并没有真正的帮助。


我在我的标签模型realation:

public function domains() { return $this->belongsToMany('App\Models\technical\Domains', 'domain_tag', 'id', 'domains_id'); } 

我realation在我的域模型:

public function tags() { return $this->belongsToMany('App\Models\technical\Tags_Domains', 'domain_tag', 'id', 'tags_id'); } 

+0

你不需要Tags_Domains模型,你应该只需要多对一标签和领域模型。定义了多对多关系。看看文档https://laravel.com/docs/5.1/eloquent-relationships#many-to-many –

+0

我已经添加了我的问题。我删除了枢轴模型,并将我问题底部的一行添加到我的域模型中。 - 但我仍然不太明白如何使用.. – WellNo

回答

0

有不同的方式,你可以如何链接标签

如果你有标签对象,你可以使用保存()$ saveMany()的关系方法将它连结:

$domain->tags()->save($tag); 
$domain->tags()->saveMany([$tag1, $tag2]); 

如果你有一个ID,你可以使用附加()链接和分离()方法来连接/断开链接给标签/从一个域:

$domain->tags()->attach($tagId); 
$domain->tags()->detach($tagId); 

最后,有一个sync()方法更新关系,以便它只包含ID作为参数传递的记录。下面将取消链接域中的任何标记,然后用ID 1和2只链接标签:

$domain->tags()->sync(1,2); 

在你的情况,你需要改变你创建标签的方式。像你这样的批量插入既不会给你标签对象也不会给你标签ID,所以你需要逐一创建它们。您可以使用saveMany()将它们链接到域。

更换

$all_tags[] = [ 'tags' => $friendly_tags ]; 

$all_tags[] = Tag::create([ 'tags' => $friendly_tags ]); 

然后就去做

$domain->tags()->saveMany($all_tags); 
+0

我给了一个尝试,但我得到一些错误..我会尽力修复他们,并回信:) – WellNo

+0

当然,让我知道如果有仍然存在问题,代码中可能存在拼写错误,或者代码中存在其他问题。 –

+0

我用当前的代码更新了我的问题,我还在尝试一些东西:) – WellNo