查询laravel nova lens的多个连接

41ik7eoe  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(306)

我正在试图找出如何创建一个查询的拉威尔新星镜头。我知道底层查询实际上是这里最重要的部分,但我也不明白这一点。我试图从关系中检索值,以下是我的表:

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' . 我该如何让这个查询和这个镜头工作?

r3i60tvu

r3i60tvu1#

我想问题是你正在访问这个 lensAccount 新星资源。
添加以下内容 $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 新星资源。
希望一切都清楚。

相关问题