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

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

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', Как бы я сделал этот запрос и этот объектив работает?

2

Решение

Я думаю, проблема в том, что вы получаете доступ к этому lens от Account нова ресурс.

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

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

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

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

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]