У меня есть проект laravel с отношением один к одному. Но у меня проблема, я не могу удалить данные. Код выглядит совершенно нормально, никаких ошибок не появляется, но он не может удалить данные.
Это моя структура таблицы
Учительский стол
- мне бы
- название
- имя пользователя
- щипать
Келас стол
- нама_келас
- имя пользователя
- учитель_ид
Таблица келас миграции:
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateKelasTable extends Migration
{
public function up()
{
Schema::create('kelas', function (Blueprint $table) {
$table->id();
$table->string('nama_kelas');
$table->string('username')->unique();
$table->foreignId('teacher_id')->constrained()->cascadeOnDelete();
$table->timestamps();
});
}
}
Таблица учителей миграции:
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateTeachersTable extends Migration
{
public function up()
{
Schema::create('teachers', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('username')->unique();
$table->bigInteger('nip')->unique()->nullable();
$table->timestamps();
});
}
}
Модель учителя:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Teacher extends Model
{
use HasFactory;
protected $guarded = ['id'];
public function kelas()
{
return $this->hasOne(Kelas::class);
}
public function getRouteKeyName()
{
return 'username';
}
}
Келас Модель:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Kelas extends Model
{
use HasFactory;
protected $guarded = ['id'];
public function teacher()
{
return $this->belongsTo(Teacher::class);
}
public function getRouteKeyName()
{
return 'username';
}
}
Kelas Удалить контроллер:
public function destroy(Kelas $kelas)
{
$kelas->delete();
return redirect('/kelas');
}
Кнопка Удалить:
<form action="{{ route('kelas.destroy', $k->username) }}" method="POST" class="d-inline">
@method('DELETE')
@csrf
<button onclick="return confirm('Are you sure you want to delete this post?')">
Delete
</button>
</form>
3 ответа
Я не думаю, что каскадное удаление работает на laravel так, как мы ожидаем (поправьте меня, если я ошибаюсь), однако вы можете использовать наблюдателя на нужной вам модели, и как только событие удаления запускается, вы автоматически удалить отношения. взгляните на ответ на этот ранее заданный вопрос:
Автоматическое удаление связанных строк в Laravel (Eloquent ORM)
Из документации laravel: https://laravel.com/docs/8.x/eloquent#observers
Можешь попробовать этот код
public function destroy(Kelas $kelas)
{
$kelas->teacher()->delete(); // delete for relation
$kelas->delete(); // delete row in table
return redirect('/kelas');
}
Ты можешь попробовать
Kelas::destroy($kelas->id);
Похожие вопросы
Связанные вопросы
Новые вопросы
php
PHP - это широко используемый высокоуровневый, динамический, объектно-ориентированный и интерпретируемый язык сценариев, в первую очередь предназначенный для серверной веб-разработки. Используется для вопросов о языке PHP.
$k->username
идентификатором, потому что если это не так, вы не получите экземпляр, используя внедрение зависимостей в контроллере удаления Kelaspublic function destroy(Kelas $kelas)
route('kelas.destroy', $k->id)
. Голосование за закрытие как опечатка.