2015-05-28 14 views
6

Làm cách nào để xác định mối quan hệ đa hình nhiều với các trường bổ sung?Laravel - Nhiều đến nhiều quan hệ đa hình với các trường bổ sung

Tôi có ba (hoặc nhiều hơn, vì nó là một mối quan hệ đa hình) bảng.

tags table: id, name

tagged table: id, tag_id, taggable_id, taggable_type, user_id

posts table: id, record, timestamps

users table: id, name, email

Các user_id trên referes bảng gắn thẻ vào bảng người dùng trên id cột. Trong mô hình bài viết của tôi, tôi có:

public function tags() 
{ 
    return $this->morphToMany('App\Tag', 'taggable','tagged'); 
} 

và trong mô hình Tag của tôi, tôi có:

public function posts() 
{ 
    return $this->morphedByMany('App\Post', 'taggable','tagged'); 
} 

Sau đó, khi tôi thử điều này trong bộ điều khiển của tôi:

$tag = new \App\Tag(
array(
    'tag'=>"someTag" 
)); 
$tag->save() 
$post = \App\Post::find($id); 
$post->tags()->save($tag); 

tôi nhận được toàn vẹn Vi phạm ràng buộc vì không có user_id:

SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (hb . tagged , CONSTRAINT tagged_user_id_foreign FOREIGN KEY (user_id) REFERENCES users (id)) (SQL: insert into tagged (tag_id , taggable_id , taggable_type) values (26, 2, App\Resource)). Which is somewhat expected, as I have never had the chance to define or declare the user_id field.

Ngoài ra, tôi đã cố gắng withPivot() trên mối quan hệ thẻ như sau, không có kết quả:

public function tags() 
{ 
    return $this->morphToMany('App\Tag', 'taggable','tagged')->withPivot('user_id'); 
} 
+0

Bạn đã thử chưa? –

+0

Đã thử vớiPivot()? Vấn đề là làm thế nào tôi có thể gán thuộc tính. Tôi đã thử vớiPivot ('user_id') và tôi vẫn nhận được một lỗi ràng buộc toàn vẹn khi tôi vượt qua một mảng mà cũng chứa user_id để tạo phương pháp. Nó không đặt user_id trong truy vấn của nó. – CrackingTheCode

+0

'tạo' có khá nhiều thứ không liên quan đến' withPivot'. Vì vậy, thay vì câu hỏi mà bạn đã đăng (hãy đọc http://xyproblem.info/) này cho thấy những gì bạn đang cố gắng làm, những gì bạn mong đợi và những gì bạn nhận được để thay thế. –

Trả lời

5

Giống như trong các bình luận: withPivot không có gì để làm với saving/creating. Nếu bạn muốn chuyển thêm dữ liệu trục xoay khi saving, hãy làm như sau:

$post->tags()->save($tag, ['user_id' => $userId]); 
Các vấn đề liên quan