Базовая таблица или представление не найдено: 1146 Таблица "digitalsalesportal.plan_agents" не существует - PullRequest
0 голосов
/ 24 апреля 2019

Я хочу создать таблицу связей belongsToMany с двумя отдельными подключениями к базе данных. Я смог успешно сделать это в моей локальной среде, но при запуске миграции на нашем промежуточном сервере миграция выкрикивает, что таблица не существует в выбранной базе данных.

Это полная ошибка: Base table or view not found: 1146 Table 'digitalsalesportal.plan_agents' doesn't exist (SQL: delete from `digitalsalesportal`.`plan_agents` where `agent_id` = 185 and `plan_id` in (5))

  • Таблица plan_agents существует в базе данных согласно MySQLWorkbench на промежуточном сервере
  • Соединения с базой данных для mysql и proposal работают нормально
  • Это работает в локальной среде
  • Схема digitalsalesportal существует на промежуточном сервере
  • Выполнение SQL-запроса delete from `digitalsalesportal`.`plan_agents` where `agent_id` = 185 and `plan_id` in (5) в MySQLWorkbench на промежуточном сервере работает нормально

Файл миграции

<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
use Illuminate\Support\Facades\DB;
use App\Plan;
use App\PlanAgent;

class ConvertSalesPortalPlansToProposalPlans extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        $sales_portal_plans = DB::table('plans');
        $proposal_plans = Plan::withTrashed();
        foreach(PlanAgent::all() as $plan_agent){
            $plan = $sales_portal_plans->find($plan_agent->plan_id);
            if(!$plan){
                continue;
            }
            $proposal_plan = $proposal_plans->where('name', $plan->name)->first();
            if($proposal_plan){
                $agent = $plan_agent->agent;
                $agent->plans()->detach([$plan_agent->plan_id]);
                $agent->plans()->attach([$proposal_plan->id]);
            }else{
                $plan_agent->delete();
            }
        }
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
    }
}

Класс агента

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;

class Agent extends Model
{
    use SoftDeletes;

    #  ------------
    # | Attributes |
    #  ------------

    /*
     * Date attributes
     *
     * @var array
     */
    protected $dates = ['deleted_at', 'created_at', 'updated_at', 'onboarded_date'];

    /*
     * Mass-asignment attributes
     *
     * @var array
     */
    protected $fillable = ['phone', 'onboarded_date', 'website', 'agency_id'];

    #  ---------------
    # | Relationships |
    #  ---------------


    /*
     * Returns Plans associated with White Label Agent
     *
     * @return mixed
     */
    public function plans(){
        return $this->belongsToMany('App\Plan', env('DB_DATABASE').'.plan_agents')->using('App\PlanAgent')->withTimestamps();
    }

ПланАгент класса

<?php

namespace App;

use Illuminate\Database\Eloquent\Relations\Pivot;

class PlanAgent extends Pivot
{
    #  ------------
    # | Attributes |
    #  ------------

    /*
     * Defines table name
     *
     * @var string
     */
    protected $table = 'plan_agents';

    /**
     * Sets connection
     *
     * @var string
     */
    protected $connection = 'mysql';

    /**
     * Fillable attributes
     *
     * @var array
     */
    protected $fillable = ['plan_id', 'agent_id'];

    /**
     * Agent relationship
     *
     * @return mixed
     */
    public function agent()
    {
        return $this->belongsTo('App\Agent', 'agent_id');
    }
}

План класса

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Validation\Rule;
use Validator;

class Plan extends Model
{
    use SoftDeletes;

    #  ------------
    # | Attributes |
    #  ------------

    /**
     * Sets connection
     *
     * @var string
     */
    protected $connection = 'proposal';

    /**
     * Sets table name
     *
     * @var string
     */
    protected $table = 'plans';

    /*
     * Date attributes
     *
     * @var array
     */
    protected $dates = ['deleted_at', 'created_at', 'updated_at'];

    /*
     * Fillable attributes
     *
     * @var array
     */
    protected $fillable = ['name'];

}

Цель миграции - обновить идентификаторы старого плана новыми идентификаторами планов второй используемой нами базы данных и удалить любую запись, в которой мы не можем найти соответствующий план.

1 Ответ

0 голосов
/ 26 апреля 2019

Вы запрашиваете базу данных там, где она еще не существует, скорее всего, у одного из провайдеров?

Импорт фасада Schema:

use Illuminate\Support\Facades\Schema;

Затем оберните ваш код в следующем выражении:

if (Schema::hasTable('plan_agents')) {
    // do something
}

Поскольку у вас есть таблица на локальном компьютере, эта ошибка не появится, но при переносе пустой таблицы появится эта ошибка. Удалите все таблицы вручную на локальном компьютере, затем запустите миграцию, чтобы увидеть, если вы также получаете эту ошибку? Если это так, поиграйте с ответом выше и посмотрите, куда подойдет hasTable().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...