Deleting wrong relationship record
Closed this issue · 7 comments
In my system a Student is a User. After the following code a user was actually deleted. However, it took the students id and used it on the user table, thus, deleting the wrong user.
This is my controller's method
try {
DB::transaction(function () use ($id) {
Student::findOrFail($id)->delete();
}, 5);
return redirect()->action('StudentController@index');
} catch (ModelNotFoundException $exception) {
return redirect()->action('StudentController@index');
}
This is my Student class
<?php
namespace App;
use Askedio\SoftCascade\Traits\SoftCascadeTrait;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
class Student extends Model
{
use SoftCascadeTrait;
use SoftDeletes;
protected $softCascade = ['user'];
protected $dates = ['deleted_at'];
public function user()
{
return $this->belongsTo('App\User');
}
}
Am I missing anything?
@cacpmw Could you pass schema of your users and students tables? Only need primary key and relationship columns. Also I need your User class.
@maguilar92 here's what you asked. Thank you in advance.
USER SCHEMA
Schema::create('users', function(Blueprint $table)
{
$table->increments('id');
$table->integer('role_id')->unsigned()->index();
$table->string('name');
$table->string('email')->unique();
$table->dateTime('email_verified_at')->nullable();
$table->string('password');
$table->string('remember_token')->nullable();
$table->timestamps();
$table->softDeletes();
});
STUDENTS SCHEMA
Schema::create('students', function(Blueprint $table)
{
$table->increments('id');
$table->integer('user_id')->unsigned()->index();
$table->integer('registration_id')->unsigned()->index();
$table->string('private_number')->unique();
$table->string('emergency_number')->index();
$table->date('birthday');
$table->string('address');
$table->string('occupation')->index()->comment('job title');
$table->string('ssn')->unique();
$table->string('personal_id')->unique();
$table->string('marital_status')->index();
$table->integer('timetable_ticket');
$table->integer('reschedule_ticket');
$table->timestamps();
$table->softDeletes();
});
USER CLASS:
<?php
namespace App;
use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Notifications\Notifiable;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable
{
use SoftDeletes;
use Notifiable;
protected $dates = ['deleted_at'];
protected $fillable = [
'name', 'email', 'password', 'role_id'
];
protected $hidden = [
'password', 'remember_token',
];
public function role()
{
return $this->belongsTo('App\Role');
}
public function student()
{
return $this->hasOne('App\Student');
}
public function isAdmin()
{
if ($this->role->id === 1) {
return true;
}
return false;
}
public function isStudent()
{
if ($this->role->id === 4) {
return true;
}
return false;
}
public function isIntern()
{
if ($this->role->id === 3) {
return true;
}
return false;
}
}
@cacpmw Thank you for the information. I forgot to ask you what laravel version and laravel soft cascade version are you using.
@cacpmw Thank you for the information. I forgot to ask you what laravel version and laravel soft cascade version are you using.
Both the latest versions
@maguilar92 any progress on this issue?
@cacpmw Sorry but I've been tied by work. I will review it as soon as possible.
@cacpmw Also you can search for the error that you comment and open a pull request with the fix.