I want to soft delete a row and the rows of another table which references this model, but keep getting mysql foreign key constraint error, which i presume is due to the fact that the foreign key still exists and the row just has an updated deleted_at column
User Migration:
public function up()
{
Schema::create(self::TABLE_NAME, function (Blueprint $table) {
$table->increments('id');
$table->string('username')->nullable();
$table->string('name')->nullable();
$table->string('email')->nullable();
$table->string('img_url')->nullable();
$table->string('location')->nullable();
$table->string('bio')->nullable();
$table->string('following_user_ids')->nullable();
$table->string('following_channel_ids')->nullable();
$table->string('follower_ids')->nullable();
$table->string('social_id')->unique();
$table->string('role')->default(3);
$table->string('password')->nullable();
$table->rememberToken(); // not sure what this does yet, probably session handling on front end apps
$table->timestamps();
$table->softDeletes();
});
}
Report Migration:
public function up()
{
Schema::create(self::TABLE_NAME, function (Blueprint $table) {
$table->increments('id');
$table->string('location')->nullable();
$table->string('channel_ids')->nullable();
$table->unsignedInteger('user_id');
$table->string('url')->unique();
$table->string('title');
$table->string('video_name')->nullable();
$table->string('description');
$table->double('lat')->nullable();
$table->double('lng')->nullable();
$table->string('comments')->nullable();
$table->integer('like_status')->default(0);
$table->string('liker_ids')->nullable();
$table->string('thumb_url_small')->nullable();
$table->string('thumb_url')->nullable();
$table->string('thumb_url_large')->nullable();
$table->integer('view_count')->default(0);
$table->timestamps();
$table->softDeletes();
});
Schema::table(self::TABLE_NAME, function (Blueprint $table) {
$table->foreign('user_id')->references('id')->on(CreateUsersTable::TABLE_NAME);
});
}
User Model
public static function boot()
{
parent::boot();
static::deleting(function($user)
{
$user->reports()->delete();
});
}
public function user()
{
return $this->belongsTo('App\User');
}
public function reports()
{
return $this->hasMany('App\Report', Report::COL_USER_ID, self::COL_ID);
}
Report Model
public function user()
{
return $this->hasOne('App\User', User::COL_ID, self::COL_USER_ID);
}
public function report()
{
return $this->belongsTo('App\Report');
}
Deleting user
public static function deleteUser($id)
{
// Added this because Model static::deleting/deleted had no effect
// this soft deletes the report, but i fail to delete user on key constraint error at delete user
try {
// delete users reports if they exist
$reports = Report::where(Report::COL_USER_ID, $id)->get();
if (isset($reports)) {
foreach ($reports as $report) {
DeleteReportController::deleteReport($report->id);
}
}
} catch (\Exception $ignored) {
}
try {
User::where(Report::COL_ID, $id)->delete();
} catch (\Exception $e) {
throw new ModelNotFoundException('Could not delete user. ' . $e->getMessage(), 404);
}
}
via Chebli Mohamed
Aucun commentaire:
Enregistrer un commentaire