【问题标题】:Laravel get wrong table while queryingLaravel 在查询时得到错误的表
【发布时间】:2015-12-28 01:16:21
【问题描述】:

我尝试将一些数据插入到我创建的新表中,但 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定义表名的方式

【问题讨论】:

    标签: laravel laravel-5


    【解决方案1】:

    我不确定您的相关 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,但是你可以像这样改变它!

    【讨论】:

      【解决方案2】:

      解决此问题的一种方法是告诉模型要使用哪个表(放入您的模型):

      protected $table = 'job_contract';
      

      通过这种方式,您可以强制模型使用该表而不是其他表 See more here

      【讨论】:

        【解决方案3】:

        关于关系表的引用:

        role_user 表由相关模型名称的字母顺序派生而来,包含 user_id 和 role_id 列。

        在您的情况下,它将是带有contract_id 和job_id 的contract_job。

        还有一句话:

        但是,您可以随意覆盖此约定。您可以通过将第二个参数传递给 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的报价

        【讨论】:

        • 我希望这就是导致您的问题的原因。保重
        猜你喜欢
        • 2016-07-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-10-31
        相关资源
        最近更新 更多