Итак, вот как это устроено.
Я мысль У меня все работало в моих файлах модели, но, к сожалению, я столкнулся с ошибкой целостности с моими внешними ключами.
Мои модели названы:
Step.php
StepCategory.php
StepSection.php
StepQuestion.php
Я не совсем уверен, как установить мои отношения «многие к одному» и что к чему принадлежит.
Имена таблиц моей базы данных следующие:
steps
step_categories
step_sections
step_questions
Я сталкиваюсь с этой ошибкой, когда удаляю родительскую запись чего-либо ... Если я удалю шаг, он должен удалить категорию, разделы и вопросы, связанные с ними. Если я удалю категорию, она должна удалить раздел и вопросы. Если я удалю раздел, он удалит все вопросы.
В моей таблице step_categories у меня есть столбец внешнего ключа с именем step_id.
В моей таблице step_sections у меня есть столбец внешнего ключа с именем category_id.
В моей таблице step_questions у меня есть столбец внешнего ключа с именем section_id.
Имя моего внешнего ключа в моей таблице step_categories - step_categories_step_id_foreign.
Имя моего внешнего ключа в моей таблице step_sections - step_sections_category_id_foreign.
Мое имя внешнего ключа в моей таблице step_questions еще не настроено, так как я еще не сделал эту часть сайта. В настоящее время я застрял на части разделов.
Моя функция destroy() в моем файле StepsController.php:
public function destroy($id)
{
// Find the step by the ID
$step = Step::find($id);
// Find all the categories and delete them.
$step->category()->delete();
// Delete the step
$step->delete();
// Flash the Session
Session::flash('success', 'The step has been successfully deleted.');
// Return Redirect to the index page
return redirect()->route('steps.index');
}
Вот как выглядят мои модели ... Это насколько я понял ... :(
Step.php
class Step extends Model
{
// Tell the model what table to use
protected $table = 'steps';
// Define the relationship between steps and step categories
public function category() {
return $this->hasMany('App\StepCategory');
}
}
StepCategory.php
class StepCategory extends Model
{
// Tell the model what table to use
protected $table = 'step_categories';
// Define the relationship between step categories and steps
public function step() {
return $this->hasOne('App\Step', 'id', 'step_id');
}
// Define the relationship between steps categories and sections
public function section() {
return $this->hasMany('App\StepSection');
}
}
и мой StepSection.php
class StepSection extends Model
{
// Tell the model what table to use
protected $table = 'step_sections';
// Define the relationship between step sections and step categories
public function category() {
return $this->hasOne('App\StepCategory', 'id', 'category_id');
}
}
Так что это законная информация, которую я могу предоставить, которая, как я думаю, решит проблему. Если вам нужна дополнительная информация, чтобы помочь мне установить эти отношения, дайте мне знать.
Пока я могу удалить шаг, и он удалит категорию, если к категории не прикреплены разделы. Однако я не могу удалить шаг или категорию, если к ним прикреплены какие-либо разделы. : / Не знаю, что происходит.






Похоже, ваша проблема связана с вашими таблицами, поэтому убедитесь, что когда вы объявляете внешний ключ в своих миграциях, вы добавляете то, что должно быть сделано при удалении / обновлении этих строк. Например:
На вашем step_categories внешний ключ step_id должен быть таким:
$table->foreign('step_id')->references('id')->on('step')->onDelete('cascade')->onUpdate('cascade');
Вы должны сделать то же самое со всеми своими таблицами
Вы добавили каскад ondelete в свою миграцию для внешних ключей?