我想用两个独立的数据库连接创建一个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
存在于数据库中mysql
和proposal
的数据库连接正常工作digitalsalesportal
存在于登台服务器中delete from `digitalsalesportal`.`plan_agents` where `agent_id` = 185 and `plan_id` in (5)
正常工作迁移文件
<?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();
}
PlanAgent类
<?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'];
}
迁移的目标是使用我们正在使用的第二个数据库的新计划ID更新旧计划ID,并删除找不到匹配计划的任何记录。
答案 0 :(得分:0)
您正在查询当前尚不存在的数据库,很可能是在提供程序之一中查询的?
导入Schema
门面:
use Illuminate\Support\Facades\Schema;
然后将您的代码包装在以下语句中:
if (Schema::hasTable('plan_agents')) {
// do something
}
因为您的表位于本地,所以不会出现此错误,但是当您迁移空表时,将弹出此错误。在本地手动删除所有表,然后运行迁移以查看是否也收到此错误?如果是这样,请尝试以上答案,然后查看hasTable()
的适合位置。