Você não verá nada em
Films_Genres
table até que você insira explicitamente algo nela. A integridade referencial através de PK e FK não serve para preencher suas tabelas para você. Seu código MySql para inserir um novo registro em
Films_Genres
, se for um novo filme que corresponde a um novo gênero, pode parecer INSERT INTO Films (Title) VALUES ('Title1');
SET @film_id = LAST_INSERT_ID();
INSERT INTO Genres (Name) VALUES ('Genre1');
SET @genre_id = LAST_INSERT_ID();
INSERT INTO Films_Genres (film_id, genre_id) VALUES(@film_id, @genre_id);
No lado do php, para obter um ID recém-atribuído para um campo autoincrementado, use
$mysqli->insert_id
. Agora, se você quiser criar um novo filme e atribuí-lo a vários gêneros ao mesmo tempo, você pode fazer
INSERT INTO Films (Title) VALUES ('Title2');
SET @film_id = LAST_INSERT_ID();
-- if you get ids of genre from your UI just use them
INSERT INTO Films_Genres (film_id, genre_id)
SELECT @film_id, id
FROM Genres
WHERE id IN (2, 3, 4);
INSERT INTO Films (Title) VALUES ('Title3');
SET @film_id = LAST_INSERT_ID();
-- if you names of genres you can use them too
INSERT INTO Films_Genres (film_id, genre_id)
SELECT @film_id, id
FROM Genres
WHERE Name IN ('Genre2', 'Genre4');
Aqui está SQLFiddle demonstração