Я хочу создать таблицу связей 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'];
}
Цель миграции - обновить идентификаторы старого плана новыми идентификаторами планов второй используемой нами базы данных и удалить любую запись, в которой мы не можем найти соответствующий план.