Laravel5.1 框架关联模型之后操作实例分析(2)

  public function getIndex()
  {
    $tag = Tag::findOrFail(1);
    // create方法同样也可以接受第二个参数。
    $tag->posts()->create([
      'title' => 'Laravel Model',
      'sub_title' => 'Laravel 模型关联的使用',
      'content' => 'content...'
    ], ['expires' => true]);
  }

2 更新关联关系

2.1 更新一个关系(除多对多适用)

重要的事情需要重复一遍:associate方法只不对多对多关系适用。而且使用时要用下方模型 调用associate方法,将下方模型更新到新的上方模型

  public function getIndex()
  {
    $post = Post::findOrFail(1);
    $comment = Comment::findOrFail(1);
    $comment->post()->associate($post);
    $comment->save();
  }

2.2 移除一个关系(除多对多适用)

重要的事情需要重复一遍:dissociate方法只不对多对多关系适用。而且使用时要用下方模型 调用dissociate方法,将下方模型从上方模型的关联中移除。此外此方法执行后会将下方模型的外键id至为0

  public function getIndex()
  {
    $post = Post::findOrFail(1);
    $comment = Comment::findOrFail(1);
    $comment->post()->dissociate($post);
    $comment->save();
  }

2.3 追加一个关系(多对多关系)

一定要看注释,一定要看注释,一定要看注释,注释解释的很清楚,你可能心中有疑问 这个追加关系和之间创建关系有什么区别?你可能忽视了一个细节:创建添加时 是新建一个模型后加入关联,而attach方法是:追加一个已经存在的模型进行关联。

  public function getIndex()
  {
    // 取到ID为3的文章 这篇文章与id为1的tag有关系。
    $post = Post::findOrFail(3);
    // attach方法的参数只需要传递id(整型)即可,中间表会自动更新。
    // 注意:attach的功能是追加一个关系并非更新,执行以下代码后 该post会与id为3和2的tag有关系。
    $post->tags()->attach(2);
    $post->save();
  }

当追加关系时同样也可以将一个中间表数据加入第二个参数,以此更新中间表的其他列。

  public function getIndex()
  {
    // 取到ID为3的文章 这篇文章与id为1的tag有关系。
    $post = Post::findOrFail(3);
    // attach方法的参数只需要传递id(整型)即可,中间表会自动更新。
    // 注意:attach的功能是追加一个关系并非更新,执行以下代码后 该post会与id为3和2的tag有关系。
    $post->tags()->attach(2, ['expires' => true]);
  }


      

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/3818.html