Я пытаюсь выяснить, как создать запрос для объектива 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'
, Как бы я сделал этот запрос и этот объектив работает?
Я думаю, проблема в том, что вы получаете доступ к этому 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
нова ресурс.
Надеюсь, это ясно.
Других решений пока нет …