Laravel在查询时出错了

时间:2015-09-30 09:46:25

标签: laravel laravel-5

我尝试将一些数据插入到我创建的新表中,但是laravel选择了错误的反向表。而不是job_contract得到contract_job。

  

Connection.php第636行中的QueryException:   SQLSTATE [42S02]:未找到基表或视图:1146表' job.contract_job'不存在(SQL:插入contract_jobcontract_idjob_id)值(2,4))

我是laravel的新人。有人知道laravel定义表名称的方式

3 个答案:

答案 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');

来自Laravel docs

的报价