Laravel How To Sub Присоединяйтесь к Отношениям - PullRequest
0 голосов
/ 27 мая 2019

Я хочу потянуть NPC с обещаниями днем. Тем не менее, с этим мне нужно название подземелья. У меня есть 3 таблицы.

Таблица NCS:

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"

Но мне нужно название подземелья с этим результатом.

1 Ответ

1 голос
/ 27 мая 2019

Вы должны использовать дополнительное соединение + выбор.Попробуйте это.

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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...