我刚刚学习了Laravel,并且正在尝试创建自己的项目。现在我面临挑战。
我有3张桌子。数据库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_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');
}
}
模型Schedule.php
class Schedule extends Model
{
protected $connection = 'conn1';
protected $table = 'app_schedule_schedule';
public function appSchedules()
{
return $this->belongsToMany(AppSchedules::class)->withPivot('schedule_id', 'name');
}
}
模型MainSchedule.php
class MainSchedule extends Model
{
//
protected $connection = 'conn2';
protected $table = 'schedule';
}
控制器AppSchedulesController.php
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);
}
}
现在我的挑战是当我想在索引函数中检索列表时。 我想获得这样的列表:
ID | NAME | IN | OUT ! MAIN SCHEDULE
-----------------------------------------------------------
1 | 7AM-7PM | 07:00 | 19:00 | > 5 - Long Shift
| | | | > 32 - Long Morning Shift
但是当我编写此索引函数
时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))
我知道我必须为每个表提供唯一的别名。但是我不知道该怎么做,我想得到这样的结果。
我的关系不对吗?
谢谢。
答案 0 :(得分:0)
这肯定会起作用
public function index()
{
$appSchedules = AppSchedule::with(['schedules' => function ($query) {
$query->on('conn2');
}])->get();
return view('admin.schedules.index')->with('appSchedules', $appSchedules);
}