# Laravel Many To Many 假設有兩張表屬於多對多關係 ``` users id - integer name - string roles id - integer name - string role_user (中間表:慣例命名,依字母開頭排序) user_id - integer role_id - integer ``` * `attach` 用法:例如要將 role 附加到 user 並記錄在中間表。 ```php= use App\Models\User; $user = User::find(1); $user->roles()->attach($roleId); ``` * `detach` 用法:從中間表刪除相應的紀錄。 ```php= // 從 user 刪除單一 role $user->roles()->detach($roldId); // 從 user 刪除所有 role $user->roles()->detach(); ``` * `sync` 用法:在中間表同時加入多筆對應紀錄,但如果有 ID 沒有存在於 sync() 中,即使原本存在的關係也會被移除 (同 detach),也不會插入重複的紀錄 (**只用 attach() 會重複插入!**)。 ```php= role_user | id | role_id | user_id | | -- | --------| ------- | | 1 | 1 | 1 | | 2 | 2 | 1 | | 3 | 3 | 1 | $user->roles()->sync([1, 2]); // role_id = 3 被移除 | id | role_id | user_id | | -- | --------| ------- | | 1 | 1 | 1 | | 2 | 2 | 1 | ``` * `syncWithoutDetaching` 用法:在中間表同時加入多筆對應紀錄,即使有 ID 沒有存在於 syncWithoutDetaching() 中,原本存在的關係也不會被移除,且不會插入重複的紀錄 (**只用 attach() 會重複插入!**)。 ```php= role_user | id | role_id | user_id | | -- | --------| ------- | | 1 | 1 | 1 | | 2 | 2 | 1 | $user->roles()->syncWithoutDetaching([1, 2, 3]); // 插入 role_id = 3 ,但不會重複插入既有的 (role_id = 1, 2) | id | role_id | user_id | | -- | --------| ------- | | 1 | 1 | 1 | | 2 | 2 | 1 | | 3 | 3 | 1 | ``` ###### tags: `Laravel`
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up