Маяк готов к загрузке отношений - PullRequest
0 голосов
/ 02 февраля 2020

Я пытался перенести мой старый API в GraphQl, и я пытаюсь загрузить его только один раз, но с маяком graphql я не могу найти правильный путь

моя модель

public function getMeta($name, $defaultValue = null)
{
    if (!$this->relationLoaded('metas')) {
        return $defaultValue;
    }

    return $this->metas->where('name', $name)->first()->value ?? $defaultValue;
}

ранее я Я использовал laravel jsonResources

'built_year' => $this->getMeta('built_year'),
            'floors' => $this->getMeta('floors'),
            'cabins' => $this->getMeta('cabins'),

. При использовании этого метода для таблицы метасов был сделан один запрос

, но теперь, используя graphql, он выполняет каждый запрос базы данных с каждым $this->getMeta вызовом my схема

type Cruise{
built_year : GetMeta @field(resolver:"App\\GraphQL\\Types\\GetMetaTypes@get")
    floors : GetMeta @field(resolver:"App\\GraphQL\\Types\\GetMetaTypes@get")
    cabins : GetMeta @field(resolver:"App\\GraphQL\\Types\\GetMetaTypes@get")
}

type GetMeta{
    value : String
}

Пользовательский тип

public function get($cruise,$next,$a,$b)
    {
        $cruise->load("metas");
        return ['value' => $cruise->getMeta($b->fieldName) ];
    }

1 Ответ

1 голос
/ 02 февраля 2020

В вашем последнем методе вы каждый раз перезагружаете отношение: $cruise->load("metas"). Что вы должны сделать, это загрузить отношение только один раз. Вы можете сделать это с $cruise->loadMissing('metas'). Всегда используйте одинарные кавычки.

...