Php 具有多对多关系的对象名称无效,具有2个DB连接

Php 具有多对多关系的对象名称无效,具有2个DB连接,php,sql-server,laravel,laravel-6,sqlsrv,Php,Sql Server,Laravel,Laravel 6,Sqlsrv,我正在构建一个培训web应用程序来跟踪员工培训和认证。我已经创建了一个关联模型,该模型使用辅助数据库连接到另一个数据库,该数据库的信息由另一个应用程序生成,因此我无法控制数据的结构。associates表使用associates的编号作为主键,而不是自动递增的ID。我创建了一个表来跟踪发生的每个培训/认证课程。我在助理和课程之间创建了多对多关系,但在尝试向数据透视表添加记录时,我运行了一个错误 “SQLSTATE[42S02]:[Microsoft][ODBC Driver 17 for SQL

我正在构建一个培训web应用程序来跟踪员工培训和认证。我已经创建了一个关联模型,该模型使用辅助数据库连接到另一个数据库,该数据库的信息由另一个应用程序生成,因此我无法控制数据的结构。associates表使用associates的编号作为主键,而不是自动递增的ID。我创建了一个表来跟踪发生的每个培训/认证课程。我在助理和课程之间创建了多对多关系,但在尝试向数据透视表添加记录时,我运行了一个错误

“SQLSTATE[42S02]:[Microsoft][ODBC Driver 17 for SQL Server][SQL Server]对象名称“associate_course”无效。(SQL:插入到[associate_course]([associate_id],[course_id],[created_at],[Update_at])值(0000,12020-01-31 18:36:56.3902020-01-31 18:36:56.390))”

以下是调用的函数,用于在数据透视表(发生错误的位置)中创建记录

这是我的助理模特

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Associate extends Model
{
    protected $connection = 'SHOPFLOOR';
    protected $table = 'USERS';

    public function getRouteKeyName()
    {
        return 'NUMBER';
    }

    public function courses()
    {
        return $this->belongsToMany(Course::class, 'associate_course', 'associate_id', 'course_id', 'NUMBER', 'id')->withTimestamps();
    }
}

如果不查看数据库结构,很难说,错误清楚地表明找不到查询中指定的表。很可能是您忘记在语句中指定schema。您显示的IMHO代码与问题没有实际关系

Laravel sqlsrv驱动程序存在错误。我需要指定完整的模式以使其工作。就我而言,这是TRAINING.dbo.associate_课程

所以关系是这样的

Associate.php

public function courses()
    {
        return $this->belongsToMany(Course::class, 'TRAINING.dbo.associate_course', 'associate_id', 'course_id', 'NUMBER', 'id')->withTimestamps();
    }
Course.php

public function associates() {
        return $this->belongsToMany(Associate::class, 'TRAINING.dbo.associate_course', 'course_id', 'associate_id', 'id', 'NUMBER')->withTimestamps();
    }

我同意@AJ的说法,它看起来像是你的数据库,它正在试图查找
associate\u course
,但找不到它。我最终解决了这个问题。在我得到解决方案之前,正如我在第一篇文章中所说的,我可以复制错误中给出的sql,并在我的DB客户机中运行它,它会工作。我通过在关系定义中指定DB模式解决了这个问题。例如
return$this->belongtomany(Associate::class,'TRAINING.dbo.Associate_course','course_id','Associate_id','id','NUMBER')->with timestamps()
public function courses()
    {
        return $this->belongsToMany(Course::class, 'TRAINING.dbo.associate_course', 'associate_id', 'course_id', 'NUMBER', 'id')->withTimestamps();
    }
public function associates() {
        return $this->belongsToMany(Associate::class, 'TRAINING.dbo.associate_course', 'course_id', 'associate_id', 'id', 'NUMBER')->withTimestamps();
    }