我正在试图找出如何创建一个查询的拉威尔新星镜头。我知道底层查询实际上是这里最重要的部分,但我也不明白这一点。我试图从关系中检索值,以下是我的表:
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'
. 我该如何让这个查询和这个镜头工作?
1条答案
按热度按时间r3i60tvu1#
我想问题是你正在访问这个
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]
.因此,根据添加镜头的位置,修改join语句。如果要在下面添加镜头,则当前查询将起作用
StatementVersion
新星资源。希望一切都清楚。