我在测试中有以下代码:
$post->tags()->detach($second_tag);
$this->assertEquals(1, $post->tags->count());
直到那里一切正常,但我在断言行下添加以下代码:
$post->tags()->detach($second_tag);
$post->load('tags');
$this->assertEquals(1, $post->tags->count());
第二个断言失败并使其工作我必须手动添加一行:
## Items [/item{?type}]
+ Parameters
+ type (enum[string], optional)
+ Default: foo
+ Members
+ foo
+ bar
### List [GET {&from}]
+ Parameters
+ page (integer, optional)
+ Default: 1
我错过了什么吗?每次我在belongsToMany关系中分离模型时,是否必须手动重新加载关系?不得不这样做真的很令人沮丧。这有什么原因吗?
答案 0 :(得分:0)
情况确实如此。
分离方法将删除相应的记录 中间表;但是,两种模型都将保留在数据库中。
因此,即使在detaching
second_tag
之后,$post->tags->count
也不是最新的,仍然保留该值,就像模型没有分离一样。
这就是为什么在重新加载关系后它确实有效。
简单来说:
共有2层:一层用于关系,另一层用于数据库。附加/分离功能仅在关系层上发生。而count
访问不知道关系层中的修改的数据库层。
如何统计标签?
这不是最漂亮的解决方案,但您可以设置一个变量,其初始值将是返回的count()
值,然后通过增加/减少它来维持它。
$countTags = $post->tags->count();
$post->tags()->attach($first_tag);
$countTags++;
$post->tags()->attach($second_tag);
$countTags++;
$post->tags()->detach($second_tag);
$countTags--;