はじめに
ユーザの論理削除に伴って、メッセージも論理削除しようと思い、下記のコードを実行したところ、メッセージだけ論理削除されずに普通に削除されてしまったので、原因と解決法を書いておきます。
public function deleteUserLogically($id)
{
DB::transaction(function () use ($id) {
$user = User::find($id);
$messages = DB::table('messages')
->Where('from_id', '=', $user->id)
->get();
foreach ($messages as $message)
{
$message->delete();
}
$user->delete();
});
}
原因
Eloquent ORMではなく、DBファサードでdelete()メソッドを実行していた。
解決法
原因がわかったので、delete()メソッドをEloquent ORMで実行していきます。
public function deleteUserLogically($user)
{
DB::transaction(function () use ($id) {
$user = User::find($id);
$messages = Message::Where('from_id', '=', $user->id)
->get();
foreach ($messages as $message)
{
$message->delete();
}
$user->delete();
});
}
これでうまくいきました!
まとめ
今回の出来事で、今までなんとなく使っていた、DBファサードとEloquent ORMについて詳しくなる事ができました!また、Laravelのファサードについての理解も深められたので良かったです。