SQLSTATE[42S02]: 找不到基 table 或视图 (belongsToMany) Laravel 5.4
SQLSTATE[42S02]: Base table or view not found (belongsToMany) Laravel 5.4
请有人帮我解决这个问题。我是 laravel 的新手,现在我需要将一个数组从 select 标记存储到 mysql,我遇到了这个错误。
SQLSTATE[42S02]:未找到基础 table 或视图:1146 Table 'cmsystem.account_code_project' 不存在(SQL:select account_code_ac_id
来自 account_code_project
其中 project_pj_id
= 1)。似乎与使用 belongsToMany() 函数有关。我应该在这里做什么是我的代码。
这是 project_table
//project table
Schema::create('projects', function(Blueprint $table)
{
$table->increments('pj_id');
$table->string('pj_title',100);
$table->string('pj_description');
});
这是帐号代码table
//codes
Schema::create('accountcodes', function(Blueprint $table)
{
$table->increments('ac_id');
$table->string('ac_code',100)->nullable();
$table->string('ac_description')->nullable();
});
这是两个 table
的中间 table
//intermediate table
Schema::create('code_project', function(Blueprint $table){
$table->increments('id');
$table->integer('project_id')->unsigned();
$table->foreign('project_id')->references('pj_id')->on('projects');
$table->integer('account_id')->unsigned();
$table->foreign('account_id')->references('ac_id')->on('accountcodes');
});
项目总监
//ProjectController
public function store(Request $request)
{
$this->validate($request,[
'pj_title'=>'required',
'pj_description'=>'required',
]);
$project = new project;
$project->pj_title = $request->pj_title;
$project->pj_description = $request->pj_description;
$project->save();
$project->accounts()->sync($request->accounts, false);
return redirect('/projectlist');
}
型号
//AccountCode
protected $table = 'accountcodes';
public function projects()
{
return $this->belongsToMany('App\Project');
}
//Project
protected $table = 'projects';
public function accounts()
{
return $this->belongsToMany('App\AccountCode');
}
谢谢。
您可以在 belongsToMany
中提示 table 名称
return $this->belongsToMany('App\AccountCode',"code_project");
这是因为按照惯例,你的枢轴 table 应该被命名为:accountcode_project
(这也没有反映你的模型名称应该是 Accountcode
)
发生这种情况是因为您必须在模型关系中指定枢轴 table 名称:
return $this->belongsToMany('App\Project', 'code_project');
否则 Eloquent 会尝试检测默认的 table 名称并遵循其约定,我鼓励您遵循这些约定。
好的,我通过声明两个模型的代表来解决它,所以它看起来像这样
//AccountCode
public function projects()
{
return $this->belongsToMany('App\Project', 'accountcode_project', 'ac_id', 'pj_id');
}
// Project
public function accountcodes()
{
return $this->belongsToMany('App\AccountCode', 'accountcode_project', 'pj_id', 'ac_id');
}
请有人帮我解决这个问题。我是 laravel 的新手,现在我需要将一个数组从 select 标记存储到 mysql,我遇到了这个错误。
SQLSTATE[42S02]:未找到基础 table 或视图:1146 Table 'cmsystem.account_code_project' 不存在(SQL:select account_code_ac_id
来自 account_code_project
其中 project_pj_id
= 1)。似乎与使用 belongsToMany() 函数有关。我应该在这里做什么是我的代码。
这是 project_table
//project table
Schema::create('projects', function(Blueprint $table)
{
$table->increments('pj_id');
$table->string('pj_title',100);
$table->string('pj_description');
});
这是帐号代码table
//codes
Schema::create('accountcodes', function(Blueprint $table)
{
$table->increments('ac_id');
$table->string('ac_code',100)->nullable();
$table->string('ac_description')->nullable();
});
这是两个 table
的中间 table//intermediate table
Schema::create('code_project', function(Blueprint $table){
$table->increments('id');
$table->integer('project_id')->unsigned();
$table->foreign('project_id')->references('pj_id')->on('projects');
$table->integer('account_id')->unsigned();
$table->foreign('account_id')->references('ac_id')->on('accountcodes');
});
项目总监
//ProjectController
public function store(Request $request)
{
$this->validate($request,[
'pj_title'=>'required',
'pj_description'=>'required',
]);
$project = new project;
$project->pj_title = $request->pj_title;
$project->pj_description = $request->pj_description;
$project->save();
$project->accounts()->sync($request->accounts, false);
return redirect('/projectlist');
}
型号
//AccountCode
protected $table = 'accountcodes';
public function projects()
{
return $this->belongsToMany('App\Project');
}
//Project
protected $table = 'projects';
public function accounts()
{
return $this->belongsToMany('App\AccountCode');
}
谢谢。
您可以在 belongsToMany
return $this->belongsToMany('App\AccountCode',"code_project");
这是因为按照惯例,你的枢轴 table 应该被命名为:accountcode_project
(这也没有反映你的模型名称应该是 Accountcode
)
发生这种情况是因为您必须在模型关系中指定枢轴 table 名称:
return $this->belongsToMany('App\Project', 'code_project');
否则 Eloquent 会尝试检测默认的 table 名称并遵循其约定,我鼓励您遵循这些约定。
好的,我通过声明两个模型的代表来解决它,所以它看起来像这样
//AccountCode
public function projects()
{
return $this->belongsToMany('App\Project', 'accountcode_project', 'ac_id', 'pj_id');
}
// Project
public function accountcodes()
{
return $this->belongsToMany('App\AccountCode', 'accountcode_project', 'pj_id', 'ac_id');
}