2016-06-13 81 views
0

我有3個表posts,tags,和一個數據透視表post_tag爲什麼在Laravel中附加方法返回null?

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 ,...)?

回答

1

attach方法不返回任何東西,這就是爲什麼你得到null。要檢查記錄是否插入成功,您需要再次調用數據庫。它與Delete方法類似。請參閱this以參考附加方法。

+0

是的你是對的。但是我認爲這很糟糕,'attach'方法不會返回任何東西! –

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參數應作爲第二個參數傳遞以避免分離所有其他行。