Php Laravel-跨数据库关系
我刚刚学习了拉威尔,我正在尝试创建我自己的项目。现在我有一个挑战 我有三张桌子。数据库A中有2个表,数据库B中有1个表 数据库B中的表不可编辑 表架构Php Laravel-跨数据库关系,php,mysql,laravel,Php,Mysql,Laravel,我刚刚学习了拉威尔,我正在尝试创建我自己的项目。现在我有一个挑战 我有三张桌子。数据库A中有2个表,数据库B中有1个表 数据库B中的表不可编辑 表架构 1. conn1.Db_A.app_schedules id | name | in | out -------------------------------- 1 | 7AM-7PM | 07:00 | 19:00 2. conn1.Db_A.app_schedule_schedule app_schedu
1. conn1.Db_A.app_schedules
id | name | in | out
--------------------------------
1 | 7AM-7PM | 07:00 | 19:00
2. conn1.Db_A.app_schedule_schedule
app_schedule_id | schedule_id | name
----------------------------------------------------
1 | 5 | Long Shift
1 | 32 | Long Morning Shift
3. conn2.Db_B.schedule
idschedule | schedulename
----------------------------------------------------
5 | Long Shift
32 | Long Morning Shift
模型AppSchedule.php
class AppSchedule extends Model
{
//
protected $connection = 'conn1';
protected $table = 'app_schedules';
protected $fillable = [
'created_at',
'updated_at',
'name',
'in',
'out',
'remarks',
];
public function schedules()
{
return $this->belongsToMany(Schedule::class)->withPivot('schedule_id', 'name');
}
}
class Schedule extends Model
{
protected $connection = 'conn1';
protected $table = 'app_schedule_schedule';
public function appSchedules()
{
return $this->belongsToMany(AppSchedules::class)->withPivot('schedule_id', 'name');
}
}
class MainSchedule extends Model
{
//
protected $connection = 'conn2';
protected $table = 'schedule';
}
class AppSchedulesController extends Controller
{
public function create()
{
//
$schedules = MainSchedule::all();
return view('admin.schedules.create')->with('schedules', $schedules);
}
public function store(Request $request)
{
//
$appschedule = AppSchedule::create($request->all());
$mainScheIds = $request->input('mainScheIds', []);
for($mainScheId=0; $mainScheId < count($mainScheIds); $mainScheId++){
if($mainScheIds[$mainScheId] != '') {
$appschedule->schedules()->attach($mainScheIds[$mainScheId], ['name' => MainSchedule::select('schedulename')->where('idschedule', $mainScheIds[$mainScheId])->value('schedulename')]);
}
}
$appSchedules = AppSchedule::all();
return view('admin.schedules.index')->with('appSchedules', $appSchedules);
}
}
Model Schedule.php
class AppSchedule extends Model
{
//
protected $connection = 'conn1';
protected $table = 'app_schedules';
protected $fillable = [
'created_at',
'updated_at',
'name',
'in',
'out',
'remarks',
];
public function schedules()
{
return $this->belongsToMany(Schedule::class)->withPivot('schedule_id', 'name');
}
}
class Schedule extends Model
{
protected $connection = 'conn1';
protected $table = 'app_schedule_schedule';
public function appSchedules()
{
return $this->belongsToMany(AppSchedules::class)->withPivot('schedule_id', 'name');
}
}
class MainSchedule extends Model
{
//
protected $connection = 'conn2';
protected $table = 'schedule';
}
class AppSchedulesController extends Controller
{
public function create()
{
//
$schedules = MainSchedule::all();
return view('admin.schedules.create')->with('schedules', $schedules);
}
public function store(Request $request)
{
//
$appschedule = AppSchedule::create($request->all());
$mainScheIds = $request->input('mainScheIds', []);
for($mainScheId=0; $mainScheId < count($mainScheIds); $mainScheId++){
if($mainScheIds[$mainScheId] != '') {
$appschedule->schedules()->attach($mainScheIds[$mainScheId], ['name' => MainSchedule::select('schedulename')->where('idschedule', $mainScheIds[$mainScheId])->value('schedulename')]);
}
}
$appSchedules = AppSchedule::all();
return view('admin.schedules.index')->with('appSchedules', $appSchedules);
}
}
Model MainSchedule.php
class AppSchedule extends Model
{
//
protected $connection = 'conn1';
protected $table = 'app_schedules';
protected $fillable = [
'created_at',
'updated_at',
'name',
'in',
'out',
'remarks',
];
public function schedules()
{
return $this->belongsToMany(Schedule::class)->withPivot('schedule_id', 'name');
}
}
class Schedule extends Model
{
protected $connection = 'conn1';
protected $table = 'app_schedule_schedule';
public function appSchedules()
{
return $this->belongsToMany(AppSchedules::class)->withPivot('schedule_id', 'name');
}
}
class MainSchedule extends Model
{
//
protected $connection = 'conn2';
protected $table = 'schedule';
}
class AppSchedulesController extends Controller
{
public function create()
{
//
$schedules = MainSchedule::all();
return view('admin.schedules.create')->with('schedules', $schedules);
}
public function store(Request $request)
{
//
$appschedule = AppSchedule::create($request->all());
$mainScheIds = $request->input('mainScheIds', []);
for($mainScheId=0; $mainScheId < count($mainScheIds); $mainScheId++){
if($mainScheIds[$mainScheId] != '') {
$appschedule->schedules()->attach($mainScheIds[$mainScheId], ['name' => MainSchedule::select('schedulename')->where('idschedule', $mainScheIds[$mainScheId])->value('schedulename')]);
}
}
$appSchedules = AppSchedule::all();
return view('admin.schedules.index')->with('appSchedules', $appSchedules);
}
}
控制器AppSchedulesController.php
class AppSchedule extends Model
{
//
protected $connection = 'conn1';
protected $table = 'app_schedules';
protected $fillable = [
'created_at',
'updated_at',
'name',
'in',
'out',
'remarks',
];
public function schedules()
{
return $this->belongsToMany(Schedule::class)->withPivot('schedule_id', 'name');
}
}
class Schedule extends Model
{
protected $connection = 'conn1';
protected $table = 'app_schedule_schedule';
public function appSchedules()
{
return $this->belongsToMany(AppSchedules::class)->withPivot('schedule_id', 'name');
}
}
class MainSchedule extends Model
{
//
protected $connection = 'conn2';
protected $table = 'schedule';
}
class AppSchedulesController extends Controller
{
public function create()
{
//
$schedules = MainSchedule::all();
return view('admin.schedules.create')->with('schedules', $schedules);
}
public function store(Request $request)
{
//
$appschedule = AppSchedule::create($request->all());
$mainScheIds = $request->input('mainScheIds', []);
for($mainScheId=0; $mainScheId < count($mainScheIds); $mainScheId++){
if($mainScheIds[$mainScheId] != '') {
$appschedule->schedules()->attach($mainScheIds[$mainScheId], ['name' => MainSchedule::select('schedulename')->where('idschedule', $mainScheIds[$mainScheId])->value('schedulename')]);
}
}
$appSchedules = AppSchedule::all();
return view('admin.schedules.index')->with('appSchedules', $appSchedules);
}
}
但是当我写这个索引函数时
public function index()
{
$appSchedules = AppSchedule::with('schedules')->get();
return view('admin.schedules.index')->with('appSchedules', $appSchedules);
}
我犯了个错误
SQLSTATE[42000]: Syntax error or access violation: 1066 Not unique table/alias: 'app_schedule_schedule' (SQL: select `app_schedule_schedule`.*, `app_schedule_schedule`.`app_schedule_id` as `pivot_app_schedule_id`, `app_schedule_schedule`.`schedule_id` as `pivot_schedule_id`, `app_schedule_schedule`.`name` as `pivot_name` from `app_schedule_schedule` inner join `app_schedule_schedule` on `app_schedule_schedule`.`id` = `app_schedule_schedule`.`schedule_id` where `app_schedule_schedule`.`app_schedule_id` in (1))
我知道我必须为每个表提供唯一的别名。但我不知道怎么做,我想得到这样的结果
我的关系错了吗
谢谢。这肯定会有用的
public function index()
{
$appSchedules = AppSchedule::with(['schedules' => function ($query) {
$query->on('conn2');
}])->get();
return view('admin.schedules.index')->with('appSchedules', $appSchedules);
}
这肯定会奏效
public function index()
{
$appSchedules = AppSchedule::with(['schedules' => function ($query) {
$query->on('conn2');
}])->get();
return view('admin.schedules.index')->with('appSchedules', $appSchedules);
}
我想你忘记配置pivot模型了。看看这些文档:如果这还不够,请用你的问题回复。我的模型时间表已经更新了。但我还是有同样的问题。使用Illumb\Database\Elount\Relations\Pivot;类调度扩展了Pivot{protected$connection='conn1';protected$table='app_Schedule_Schedule';公共函数appSchedules(){return$this->belongsToMany(appSchedules::class)->withPivot('Schedule_id',name');}}我想你忘了配置Pivot模型。看看这些文档:如果这还不够,请用你的问题回复。我的模型时间表已经更新了。但我还是有同样的问题。使用Illumb\Database\Elount\Relations\Pivot;类调度扩展Pivot{protected$connection='conn1';protected$table='app_Schedule_Schedule';公共函数appSchedules(){return$this->belongsToMany(appSchedules::class)->withPivot('Schedule_id',name');}