php - 如何使用 findOrfail 删除具有多个或不同 ID 列的行。拉维尔

标签 php laravel crud

我是 lavravel 的新手,并尝试使用 laravel 和简单的代码删除一行

<div class="col-md-12">
@if (count($usuarios) > 0)
<?php echo $usuarios?>
<div class="panel panel-default">
    <div class="panel-heading">
        Listado de Usuarios
    </div>
    <div class="panel-body">    
    <table class="table table-striped task-table">
        <thead>
            <th>Usuario</th>
            <th>Correo electrónico</th>
            <th>Telefono</th>
            <th>Celular</th>
            <th>Acción</th>
        </thead>    
        <tbody>
        @foreach($usuarios as $usuario)
            <tr>
                <td class="table-text">
                    <div>{{ $usuario->fname }} {{ $usuario->mname }} {{ $usuario->lname }} {{ $usuario->lname2 }}</div>
                </td>
                <td class="table-text">
                    <div>{{ $usuario->email }} </div>
                </td>
                <td class="table-text">
                    <div>{{ $usuario->telefono }} </div>
                </td>
                <td class="table-text">
                    <div>{{ $usuario->celular }} </div>
                </td>

                <td>
                    <form action="{{ url('usuario') }}/{{ $usuario->ident }}" method="POST">
                    {{ csrf_field() }}
                    {{ method_field('DELETE') }}

                    <button type="submit" class="btn btn-danger">
                        <i class="fa fa-trash"></i>Delete
                    </button>

                    </form>
                </td>
            </tr>
            @endforeach
        </tbody>
    </table>
    </div>
</div>
@endif

我有我的 web.php

use App\Usuario;
use Illuminate\Http\Request;

Route::get('/', function () {
return view('welcome');
});

 /*Mostrar los Usuarios*/
 Route::get('/usuarios', function () {
 $usuarios = Usuario::all();
 return view('usuarios', [ 'usuarios' =>$usuarios ]);


 });

 Route::post('/usuario', function (Request $request) {
 $validator = Validator::make($request->all(), [
    'ident' => 'required|digits_between:5,12',
    'fname' => 'required|max:20',
    'mname' => 'required|max:20',
    'lname' => 'required|max:20',
    'lname2' => 'required|max:20',
    'email' => 'email',
    'telefono' => 'min:7',
    'celular' => 'min:10',

  ]);

 if ($validator->fails()){
    return redirect('/usuarios')
        ->withErrors($validator)
        ->withInput();

 }
$usuario = new Usuario;
$usuario->fk_id_tid = $request->id_tid;
$usuario->ident = $request->ident; 
$usuario->fname = $request->fname;
$usuario->mname = $request->mname;
$usuario->lname = $request->lname;
$usuario->lname2 = $request->lname2;
$usuario->email = $request->email;
$usuario->telefono = $request->telefono;
$usuario->celular = $request->celular;

$usuario->save();

return redirect('/usuarios');
});

**Route::delete('/usuario/{ident}', function ($ident) {
Usuario::findOrFail($ident)->delete();** 

return redirect('/usuarios');
 });

当我尝试删除行时,收到错误:

SQLSTATE[42S22]:未找到列:1054“where 子句”中的未知列“usuario.id”(SQL:select * from usuario where usuarioid = 14397755 限制 1)

我需要找到 usuario.ident 来删除该行..

好吧,我真的需要用 {fk_id_tid & ident} 进行组合,如果我找到它 --> 删除该行..

最佳答案

Laravel 不支持复合键,请参阅 here 。因此,您必须手动执行 where() 来搜索该行

Usuario::where('ident', $ident)->firstOrFail()->firstOrFail()->delete();

如果您也在删除路由中传递 fk_id_tid ,则再添加一个 where() 进行外键搜索,例如

Route::delete('/usuario/{fk_id_tid}/{ident}', function ($fk_id_tid, $ident) {

  Usuario::where('fk_id_tid', $fk_id_tid)->where('ident', $ident)->firstOrFail()->delete();
  return redirect('/usuarios');

});

关于php - 如何使用 findOrfail 删除具有多个或不同 ID 列的行。拉维尔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49838372/

相关文章:

ruby-on-rails - ruby on Rails 的设计是否考虑到了整页刷新

Java重复泛型定义

Symfony 使用 -% 生成模板。是什么意思呢?

PHPUnit:模拟 __get() 结果为 "__get() must take exactly 1 argument ..."

php ajax从数据库检索数据

javascript - React dropzone 似乎没有将文件发送到我的 PHP 端点

laravel - 在Elasticsearch中进行自定义排序?

javascript - PHP 中用于运行用户脚本的解释语言

javascript - 在datepicker jquery中从date php设置日期,奇怪的值

php - Laravel "npm install"下载 30.000 多个项目