Jak zdefiniować wiele do wielu polimorficznych relacji z dodatkowymi polami?Laravel - Wiele do wielu polimorficznych relacji z dodatkowymi polami
Mam trzy (lub więcej, ponieważ jest to stosunek polimorficzny) tabele.
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
user_id
zaznaczonych referes tabelę do tabeli użytkowników w kolumnie id. W moim modelu post mam:
public function tags()
{
return $this->morphToMany('App\Tag', 'taggable','tagged');
}
iw moim modelu tagów mam:
public function posts()
{
return $this->morphedByMany('App\Post', 'taggable','tagged');
}
Wtedy gdy jestem spróbować tego w moim kontrolera:
$tag = new \App\Tag(
array(
'tag'=>"someTag"
));
$tag->save()
$post = \App\Post::find($id);
$post->tags()->save($tag);
uzyskać Integrity Naruszenie ograniczeń w związku z brakiem identyfikatora użytkownika:
SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (
hb
.tagged
, CONSTRAINTtagged_user_id_foreign
FOREIGN KEY (user_id
) REFERENCESusers
(id
)) (SQL: insert intotagged
(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.
Również próbowałem withPivot() na metkach stosunku następująco, bezskutecznie:
public function tags()
{
return $this->morphToMany('App\Tag', 'taggable','tagged')->withPivot('user_id');
}
Czy próbowałeś? –
Próbowałem zPivot()? Problem polega na tym, jak przypisać atrybut. Próbowałem zPivot ("identyfikator_użytkownika") i nadal otrzymuję błąd ograniczenia integralności, gdy przekazuję tablicę, która zawiera również identyfikator użytkownika do metody create. Nie umieszcza identyfikatora użytkownika w zapytaniu. – CrackingTheCode
'Tworzenie' nie ma prawie nic wspólnego z' withPivot'. Więc zamiast zamieszczonego pytania (czytaj http://xyproblem.info/) pokaż, co próbujesz zrobić, czego oczekujesz i co otrzymujesz zamiast tego. –