2016-06-13 8 views
0

私は3つのテーブルposts,tags、ピボットテーブルpost_tagを持っています。Laravelでattachメソッドが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モデルでこれを持っている:Tagモデルで

class Post extends Model { 
    public function tags() { 
     return $this->belongsToMany('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_tagnullが含まれています!

ピボットテーブルに最後に挿入されたレコードの詳細(id ,...など)を取得するにはどうすればよいですか?

答えて

1

添付メソッドは何も返さないため、nullが返されます。レコードが正常に挿入されたかどうかを確認するには、もう一度DBを呼び出す必要があります。これはDeleteメソッドに似ています。アタッチメソッドの参照については、thisを参照してください。

+0

はい、あなたは正しいです。しかし、私はそれが非常に悪いと思う 'attach'メソッドは何も返しません! –

1

あなたにも付属のIDの配列を返すsync()方法をチェックすることもできます。

$post = Post::find(4); 
$post_tag = $post->tags()->sync([2], false); 
var_dump($post_tag['attached']); 

出力:

array(1) { 
    [0]=> 
    int(2) 
} 

は注意してくださいfalseパラメータが2番目の引数として渡されるべきであること他のすべての行を切り離さないようにします。

関連する問題