laravel Функция attach () ищет таблицу в базе данных по умолчанию - PullRequest
0 голосов
/ 02 февраля 2020

В моем проекте laravel несколько баз данных, по умолчанию одна из которых называется auth . Большинство таблиц в моем приложении находятся в базе данных инвентарь . В этой базе данных есть две таблицы documents и items, имеющие отношение многие ко многим. Я использую функцию laravel attach() для сохранения записей в третьей таблице. Но я получаю следующую ошибку:

SQLSTATE[42S02]: Base table or view not found: 1146 Table 'auth.document_item' doesn't exist.

Как я могу определить, что таблица document_item также находится в базе данных inventory?

1 Ответ

1 голос
/ 02 февраля 2020

Это должно сработать, если вы

  • Укажите, какое соединение использует каждая модель, используя свойство $connection.
  • Укажите пользовательскую сводную модель в отношениях belongsToMany.
use Illuminate\Database\Eloquent\Model;

class Document extends Model
{
    protected $connection = 'auth';     // database name
    protected $table = 'documents';     // table name

    public function items()
    {
        return $this->belongsToMany(Item::class, 'document_item')->using(DocumentItem::class);
}
use Illuminate\Database\Eloquent\Model;

class Item extends Model
{
    protected $connection = 'inventory'; // database name
    protected $table = 'items';          // table name

    public function documents()
    {
        return $this->belongsToMany(Document::class, 'document_item')->using(DocumentItem::class);
    }
}
use Illuminate\Database\Eloquent\Relations\Pivot;

class DocumentItem extends Pivot
{
    protected $connection = 'inventory'; // database name
    protected $table = 'document_item';  // table name

    public function document()
    {
        return $this->belongsTo(Document::class);
    }

    public function item()
    {
        return $this->belongsTo(Item::class);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...