具有 2 个数据库连接的多对多关系的对象名称无效

Invalid object name with Many to Many Relationship with 2 DB Connections

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

"SQLSTATE[42S02]: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Invalid object name 'associate_course'. (SQL: insert into [associate_course] ([associate_id], [course_id], [created_at], [updated_at]) values (0000, 1, 2020-01-31 18:36:56.390, 2020-01-31 18:36:56.390))",

这是在数据透视表中创建记录时调用的函数table(发生错误的地方)

 public function trained(Course $course, Request $request) {

        $request->validate([
            'associates' => 'required'
        ]);

        $associates = explode(',', $request->associates);

        foreach($associates as $associate_number) {
            $associate = Associate::where('NUMBER', $associate_number)->first();

            $course->associates()->attach($associate);
        } 
    }

这是我的 Associate 模型

<?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();
    }
}

这是我的课程模型

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Course extends Model
{
    protected $fillable = ['course_type_id', 'name', 'date', 'expires', 'expires_at', 'notification_threshold'];

    public function type() {
        return $this->belongsTo(CourseType::class);
    }

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

我尝试从错误中复制 sql 并将其 运行 复制到数据库中,它确实将该行插入到数据库中,这让我相信它与我的 Laravel配置?

我可以得到一些帮助来解决这个问题吗?

没有看到你的数据库结构很难说,错误清楚地表明找不到查询中指定的table。很可能是您忘记在语句中指定架构。您显示的恕我直言代码与问题并没有真正的关系。

Laravel sqlsrv 驱动程序存在错误。我需要指定完整的架构才能使其正常工作。就我而言,这是 TRAINING.dbo.associate_course.

所以关系看起来像这样

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();
    }