Как удалить строку с помощью findOrfail с несколькими или разными столбцами для идентификатора. Laravel

Я новичок в 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 Неизвестный столбец usuario.id в предложении where (SQL: выберите * из usuario, где usuario.id = 14397755 предел 1)

Мне нужно найти usuario.ident для удаления этой строки ..

На самом деле мне нужно создать композицию с {fk_id_tid & identify} Если я найду его -> удалите эту строку ..

Laravel не поддерживает эту функцию, но вы можете использовать where() для эмуляции этого.

Vinay 15.04.2018 06:50
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
1
1 079
2

Ответы 2

Laravel не поддерживает составные ключи, см. здесь. Таким образом, вам придется вручную выполнить 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');

});

Спасибо за ответ, - firstOrfail - это findOrfail? --- Ну, я пробую оба, пока ничего ...

Richard Camilo Saavedra Coneo 16.04.2018 08:27

Я пытаюсь:

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

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

});

Передача в форме

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

ошибки ..

Другие вопросы по теме