Laravel красноречивое удаление - PullRequest
0 голосов
/ 12 мая 2018

Здравствуйте, ищу помощника, как разбираться в модели Laravel Eloquent. Мне нужно удалить пользователя по Id, но у меня есть таблица Main_info, Personal_info, Holidays, other_info, fm_day, oth_daysoff. На них все я вставил UserId, и мне нужно удалить выбранный UserId из всех таблиц? Может быть, кто-то может помочь мне Как я могу сделать это с моделью Laravel Eloquent? Вот мой взгляд с кнопкой «Удалить» и методом публикации:

<div class="container">
<div class="row">

    <div class="col">
        <div class="card">
            <div class="card-head-man">
                <span>Filter type: </span>&nbsp;
                <a href="javascript:void(0)" class="btn btn-secondary btn-sm">Position</a>&nbsp;
                <a href="javascript:void(0)" class="btn btn-secondary btn-sm">Active/No</a>&nbsp;
                <a href="javascript:void(0)" class="btn btn-secondary btn-sm">Employment type</a>
                <a href="javascript:void(0)" class="btn btn-secondary btn-sm">Location</a>
            </div>
        </div>
    </div>

    <div class="col-12">
        <div class="card">
            <div class="card-header">
                <h3 class="card-title">List of employees</h3>
            </div>

            <div class="table-responsive">
                <table class="table card-table table-vcenter text-nowrap">
                    <thead>
                    <tr>
                        <th class="w-1"><a href="#" class="sort-act">ID<span class="caret"></span></a></th>
                        <th><a href="#" class="sort-act">First Name<span class="caret"></span></a></th>
                        <th>Last Name</th>
                        <th>Position</th>
                        <th>Active/no</th>
                        <th>Employment type</th>
                        <th>Location</th>
                        <th></th>
                        <th></th>
                    </tr>
                    </thead>

                    <tbody>
                    @foreach($allData as $data)


                        <tr>
                        <td><span class="text-muted">{{ $data->id }}</span></td>
                        <td>{{ $data->first_name }}</td>
                        <td>
                            {{ $data->last_name }}
                        </td>
                        <td>
                            {{ $data->position }}
                        </td>
                        <td>
                            {{ $data->employment_type }}
                        </td>
                        <td>
                            <span class="status-icon bg-success"></span> Active
                            <span class="status-icon bg-danger"></span> No
                        </td>
                        <td>{{ $data->location }}</td>

                        <td class="text-right">
                            <a href="javascript:void(0)" class="btn btn-secondary btn-sm">Manage</a>
                            <div class="dropdown">
                                <form action="/deleteFromHome" method="post">
                                    {{csrf_field()}}
                                    <input style="display: none;" type="text" name="deleteUserId" class="form-control" id="inputName3" value="{{ $data->id }}">
                                    <button type="submit" class="btn btn-secondary btn-sm">Delete</button>
                                </form>
                            </div>
                        </td>
                        <td>
                            <a class="icon" href="javascript:void(0)">
                                <i class="fe fe-edit"></i>
                            </a>
                        </td>
                    </tr>
                    @endforeach
                    </tbody>
                </table>
            </div>
        </div>

</div>

Вот мой контроллер, как я делаю это сейчас:

public function deleteUserFromHome(Request $req)
{
    $userId = $req->input('deleteUserId');

    OtherInfo::where('id', $userId)->delete();
    OthDaysInfo::where('id', $userId)->delete();
    HolidaysInfo::where('id', $userId)->delete();
    FMdaysInfo::where('id', $userId)->delete();
    PersonalInfo::where('id', $userId)->delete();
    PersonalInfo::where('id', $userId)->delete();
    MainInfo::where('id', $userId)->delete();

    return redirect('home');
}

Может быть, есть какой-нибудь лучший способ удалить все данные из всех таблиц о выбранном ИД пользователя? Мне нужен пример того, как я могу сделать модель Laravel Eloquent для удаления с помощью функции HasMany или еще чего-нибудь?

1 Ответ

0 голосов
/ 12 мая 2018

Вы можете использовать ->onDelete('cascade') при создании миграции таблицы. Например,

// consider a sample migration below for a table with a foreign key on your users table
Schema::create('main_info', function (Blueprint $table) {
    $table->increments('id');
    $table->integer('user_id');
    $table->foreign('user_id')
          ->references('id')
          ->on('users')
          ->onDelete('cascade');
    $table->timestamps();
});

И тогда вы можете легко удалить указанного пользователя, и Laravel позаботится об удалении его дочерних записей.

$user = User::find($id);
$user->delete(); // this will also delete any record for this user on main_info table

Подробнее здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...