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]); }
内容版权声明:除非注明,否则皆为本站原创文章。