gpt4 book ai didi

php - 查询 Laravel Nova Lens 的多个连接

转载 作者:行者123 更新时间:2023-11-29 03:17:22 24 4
gpt4 key购买 nike

我正在尝试弄清楚如何为 Laravel Nova Lens 创建查询。我知道底层查询实际上在这里很重要,但我也无法弄清楚。我正在尝试从关系中检索值,这是我的表:

accounts
statements
statement_versions

我想做的是从 statement_versions 表中检索一个值,并将其与镜头中的帐户相关联。所以,我想从我的 statement_versions 中检索 balance,并将其与一个帐户相关联。以下是我的关系是如何定义的:

// 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'。我将如何使这个查询和这个镜头工作?

最佳答案

我认为问题是您正在从 Account nova 资源访问此 lens

在镜头query函数的第一行添加如下$query->getQuery()->toSql()。如果您从 Account nova 资源访问,它将打印 select * from accounts。 URL 将类似于 nova/resources/accounts/lens/[lens-name]

如果您从Statement nova 资源访问,它将打印select * from statements。 URL 将类似于 nova/resources/statements/lens/[lens-name]

所以要看你在哪里添加镜头,修改join语句。如果您在 StatementVersion nova 资源下添加镜头,则当前查询将起作用。

希望它清楚。

关于php - 查询 Laravel Nova Lens 的多个连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52996734/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com