我尝试将一些数据插入到我创建的新表中,但是laravel选择了错误的反向表。而不是job_contract得到contract_job。
Connection.php第636行中的QueryException: SQLSTATE [42S02]:未找到基表或视图:1146表' job.contract_job'不存在(SQL:插入
contract_job
(contract_id
,job_id
)值(2,4))
我是laravel的新人。有人知道laravel定义表名称的方式
答案 0 :(得分:2)
我不确定相关php文件的Model
名称是什么。
通常,表格就像
如果您的型号名称为User
,则表格名称应为users
!
对于customer_details
这样的表格,型号名称应为CustomerDetail
但您也可以使用
选择模型中的特定表格<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Flight extends Model
{
/**
* The table associated with the model.
*
* @var string
*/
protected $table = 'my_flights';
}
在此示例中,您可以看到默认情况下表名称应为flights
,但您可以将其更改为您想要的任何内容!
答案 1 :(得分:1)
解决这个问题的方法是告诉Model wich table使用(放入你的模型):
protected $table = 'job_contract';
这样就可以强制Model使用该表而不是其他表 See more here
答案 2 :(得分:0)
关于关系表的引用:
role_user表派生自相关模型名称的字母顺序,并包含user_id和role_id列。
在你的情况下,它将是contract_id和contract_id以及job_id。
另一个引用:
但是,您可以自由地覆盖此约定。您可以通过将第二个参数传递给belongsToMany方法来执行此操作:
return $this->belongsToMany('App\Role', 'user_roles');
所以我猜你只需要将正确的表名作为第二个参数传递给你的belongsToMany方法,如下所示:
//in your Contract model
return $this->belongsToMany('App\Job', 'job_contract');
和
//in your Job model
return $this->belongsToMany('App\Contract', 'job_contract');
的报价