Я хочу тянуть NPC с залогами по дням. Однако для этого мне нужно имя подземелья. У меня 3 стола.
Таблица НПС:
id | name
-----------
1 | NPC 1
2 | NPC 2
3 | NPC 3
Таблица подземелий
id | name
---------------
1 | Dungeon 1
2 | Dungeon 2
3 | Dungeon 3
4 | Dungeon 4
5 | Dungeon 5
6 | Dungeon 6
Таблица залогов
id | npc_id | dungeon_id | date
------------------------------------------
1 | 1 | 1 | 2019-05-26
2 | 2 | 2 | 2019-05-26
3 | 3 | 3 | 2019-05-26
4 | 1 | 4 | 2019-05-27
5 | 2 | 5 | 2019-05-27
6 | 3 | 6 | 2019-05-27
Мой код контроллера;
public function index()
{
$y = Carbon::yesterday('Europe/London');
$t = Carbon::today('Europe/London');
$time = Carbon::now('Europe/London');
$yesterday = Carbon::create($y->year, $y->month, $y->day, 10, 0, 0); //set time to 10:00
$today = Carbon::create($t->year, $t->month, $t->day, 10, 0, 0); //set time to 10:00
if ($time->between($yesterday, $today, true)) {
$pledges = Npc::join('pledges', function ($join) {
$join->on('npcs.id', '=', 'pledges.npc_id')
->where('pledges.date', '=', Carbon::yesterday('Europe/London'));
})
->get();
return $pledges;
} else {
$pledges = Npc::join('pledges', function ($join) {
$join->on('npcs.id', '=', 'pledges.npc_id')
->where('pledges.date', '=', Carbon::today('Europe/London'));
})
->get();
return $pledges;
}
}
Этот код дает мне следующий результат.
0
id 5
name "NPC 1"
created_at "2019-05-27 11:35:27"
updated_at "2019-05-27 11:35:27"
npc_id 1
dungeon_id 1
date "2019-05-27"
Но мне нужно имя подземелья с этим результатом.
Вы должны использовать дополнительное объединение + выбор. Попробуй это.
public function index()
{
$time = Carbon::now('Europe/London');
$yesterday = Carbon::yesterday('Europe/London')->setTime(10, 0, 0);
$today = Carbon::today('Europe/London')->setTime(10, 0, 0);
if ($time->between($yesterday, $today, true)){
$date = $yesterday;
} else {
$date = $today;
}
$pledges = Npc::select('npcs.*', 'dungeons.id as dungeon_id', 'dungeons.name as dungeon_name')
->join('pledges', function($join) use ($date) {
$join->on('npcs.id', '=', 'pledges.npc_id')->where('date', $date);
})
->join('dungeons', 'dungeons.id', '=', 'pledges.dungeon_id')
->get();
return $pledges;
}
я получаю эту ошибку, ``` SQLSTATE [42P01]: Неопределенная таблица: 7 ОШИБКА: отсутствует запись FROM-предложения для таблицы "dungeon" LINE 1: выберите "npcs".*, "dungeon"."id" как "dungeon_id" , "dungeon"."... ^ (SQL: выберите "npcs".*, "dungeon"."id" как "dungeon_id", "dungeon"."name" как "dungeon_name" из внутреннего соединения "npcs" залог» на «npcs». «id» = «обещания». «npc_id» и «дата» = 2019-05-27 10:00:00 внутреннее соединение «подземелья» на «подземелья». «id» = «обещания» "dungeon_id") ```