所以这就是如何设置的。
我想到我的所有模型文件中都有效,但不幸的是我的外键遇到了完整性错误。
我的模型被命名为:
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');
}
}
因此,我认为可以提供合法的信息,我认为这将解决问题。如果您需要更多信息来帮助我建立这些关系,请告诉我。
到目前为止,我可以删除一个步骤,只要该类别没有附加任何部分,它就会删除该类别。但是,如果它附加了任何部分,我就无法删除步骤或类别。 :/不知道发生了什么。
答案 0 :(得分:1)
看起来您的问题是由于您的表,因此请确保在迁移中声明外键时,您要添加应删除/更新这些行的操作。例如:
在你的step_categories上输入外键' step_id'应该是这样的:
$table->foreign('step_id')->references('id')->on('step')->onDelete('cascade')->onUpdate('cascade');
您应该对所有表格执行相同的操作