Laravel Как подсоединиться к отношениям

Я хочу тянуть 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"

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

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
165
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

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") ```

TechnoBeceT 27.05.2019 15:34

Другие вопросы по теме