为什么attach方法在Laravel中返回null?

时间:2016-06-13 05:36:58

标签: php mysql laravel eloquent laravel-5.2

我有3个表poststags和数据透视表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 ,...)?

2 个答案:

答案 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参数作为第二个参数传递,以避免分离所有其他行。