我有3个表posts
,tags
和数据透视表post_tag
。
post_tag
表是:
+----+-------------+--------+
| id | post_id | tag_id |
+----+-------------+--------+
| 1 | 1 | 2 |
| 2 | 2 | 2 |
| 3 | 3 | 1 |
| 4 | 4 | 1 |
| 5 | 4 | 3 |
| 6 | 5 | 3 |
+----+-------------+--------+
我在Post
模型中有这个:
class Post extends Model {
public function tags() {
return $this->belongsToMany('Tag');
}
}
这在Tag
模型中:
class Tag extends Model {
public function posts() {
return $this->belongsToMany('Post');
}
}
现在在我的控制器中,我正在尝试将一条记录插入数据透视表post_tag
:
$post = Post::find(4);
$post_tag = $post->tags()->attach(2);
return $post_tag //it returns null
因此,我需要在数据透视表中获取已创建记录的详细信息,但$post_tag
包含null
!
如何获取数据透视表上最后插入记录的详细信息(如id ,...
)?
答案 0 :(得分:3)
attach方法不会返回任何内容,这就是为什么你得到null。要检查记录是否已成功插入,您需要再次调用DB。它类似于Delete方法。请查看this以获取对方法的参考。
答案 1 :(得分:1)
您可能需要检查sync()
方法,该方法还会返回附加ID数组:
$post = Post::find(4);
$post_tag = $post->tags()->sync([2], false);
var_dump($post_tag['attached']);
输出:
array(1) {
[0]=>
int(2)
}
请注意,应将false
参数作为第二个参数传递,以避免分离所有其他行。