【问题标题】:Laravel eloquent deleteLaravel 雄辩删除
【发布时间】:2018-10-22 13:39:53
【问题描述】:

我正在寻求有关如何理解 Laravel Eloquent 模型的帮助。

我需要通过Id 删除User,并且我有表Main_infoPersonal_infoHolidaysother_infofm_dayoth_daysoff

在表格上,我插入了UserId 字段,所以我需要从所有表格中删除选定的UserId?有人可以帮助我如何使用 Laravel Eloquent 模型做到这一点吗?

这是我对delete提交按钮和发布方法的看法:

<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');
}

也许有更好的方法可以从所有表中删除有关所选用户 ID 的所有数据? 我需要一些示例,如何使用 HasMany 函数或其他函数使 Laravel Eloquent 模型删除?

【问题讨论】:

  • 如果您有设置数据透视表,那么您可以简单地传递用户模型并使用 detach() 方法。 laravel.com/docs/5.6/…

标签: laravel model controller eloquent


【解决方案1】:

您可以在创建表迁移时使用-&gt;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

Read more here

【讨论】:

  • 仍然收到此错误:SQLSTATE[23000]:完整性约束违规:1451 无法删除或更新父行:外键约束失败(emtn_internal.other_info,CONSTRAINT other_info_ibfk_1 FOREIGN KEY (id) REFERENCES main_info (id)) (SQL: delete from main_info where id = 90)
  • 你能展示你的代码,那个错误仍然存​​在吗?它说,从错误本身来看,它来自带有外键 idother_info 表,它引用了您的 main_info 表。因此,它不是来自您的 users 表和 main_info 表之间的连接。如果您可以提供您的表结构(usersmain_infoother_info),那么这里的人们会更容易为您提供帮助。
猜你喜欢
  • 2020-12-14
  • 2022-01-21
  • 2015-06-25
  • 2018-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-26
  • 2023-04-10
相关资源
最近更新 更多