Запрос нескольких объединений для Laravel Nova Lens

Я пытаюсь понять, как создать запрос для Laravel Nova Lens. Я знаю, что основной запрос здесь действительно важен, но я тоже не могу понять этого. Я пытаюсь получить значения из отношений, вот мои таблицы:

accounts
statements
statement_versions

Я хочу получить значение из таблицы statement_versions и связать его с учетной записью в объективе. Итак, я хочу получить balance из моего statement_versions и связать его с учетной записью. Вот как определяются мои отношения:

// Accounts

public function statements()
{
    return $this->hasMany(Statement::class);
}

public function statementVersions()
{
    return $this->hasManyThrough(StatementVersion::class, Statement::class);
}

// Statements

public function accounts()
{
    return $this->belongsTo(Account::class);
}

public function statementVersions()
{
    return $this->hasMany(StatementVersion::class);
}

// StatementVersion

public function accounts()
{
    return $this->belongsToThrough(Account::class, Statement::class);
}

public function statements()
{
    return $this->belongsTo(Statement::class);
}

Вот линза, которую я пытался создать:

public static function query(LensRequest $request, $query)
{
    return $request->withOrdering($request->withFilters(
        $query->select([
                    'statement_version.balance',
                ])
                ->join('statements', 'statement.id', '=', 'statement_version.statement_id')
                ->join('accounts', 'accounts.id', '=', 'statement.account_id')
                ->orderBy('balance', 'desc')
                ->groupBy('accounts.id', 'accounts.name')
    ));
}

Это возвращает ошибку 1066 Not unique table/alias: 'accounts'. Как мне сделать так, чтобы этот запрос и этот объектив работали?


person ladidaadi    schedule 25.10.2018    source источник
comment
Вы исправили это? Это сообщение об ошибке появляется, когда вы дважды ПРИСОЕДИНЯЕТЕСЬ к одной и той же таблице без создания псевдонима или чего-то подобного, что, похоже, здесь не проблема. @hoolakoola   -  person Oladipo    schedule 09.11.2018
comment
@hoolakoola Для какого ресурса nova вы прикрепляете этот объектив?   -  person Saumini Navaratnam    schedule 12.11.2018


Ответы (1)


Я думаю, проблема в том, что вы обращаетесь к этому lens из Account ресурса nova.

Добавьте следующий $query->getQuery()->toSql() в первую строку функции lens query. Он напечатает select * from accounts, если вы обращаетесь к ресурсу Account nova. URL будет выглядеть как nova/resources/accounts/lens/[lens-name].

Будет напечатано select * from statements, если вы обращаетесь к ресурсу Statement nova. URL будет выглядеть как nova/resources/statements/lens/[lens-name].

Поэтому, в зависимости от того, где вы добавляете линзу, измените оператор соединения. Текущий запрос будет работать, если вы добавляете линзу в ресурс StatementVersion nova.

Надеюсь, это ясно.

person Saumini Navaratnam    schedule 12.11.2018