如何将此原始 SQL 查询转换为 Laravel Eloquent ORM 查询?

How do I convert this raw SQL query into a Laravel Eloquent ORM query?

我一直在尝试将原始 sql 查询转换为 Laravel Eloquent ORM 查询,但我卡住了。

                SELECT *
                FROM   transaction_history
                                   WHERE  type = 'debit'
                                   AND 
                                   (
                                        description not in ('Premium Membership Balance Top Up', 'Sign Up Bonus')
                                        OR
                                        description in ('Premium Membership Balance Top Up', 'Sign Up Bonus') and extra_details is not null
                                   )

我几周前才开始做一个 Laravel 项目..我的脑细胞在一天中的这个时候已经超出了它们的容量...我什至不知道从哪里开始。将不胜感激。

您需要在 laravel eloquent ORM 中使用原始表达式查询生成器。

访问 laravel 文档 => Raw Expressions

您可以使用 raw query builder 并粘贴您的查询。
但最好的方法应该是创建 Models (think as table) and link those models with relationships (如外键)。
此外,首先,此 tool 可以帮助您将查询转换为更 laravel 友好的查询

假设您有一个 TransactionHistory eloquent 模型表示 transaction_history table,您可以尝试使用 where 带有逻辑参数分组的子句来生成所需查询。

您可以通过将 get() 替换为 toSql() 来检查生成的 sql 查询,然后转储输出 dd($records);

$records = TransactionHistory::query()
    ->where('type', 'debit')
    ->where(function($query) {
        $query->whereNotIn(
            'description', 
            ['Premium Membership Balance Top Up', 'Sign Up Bonus']
        ->orWhere(function($query) {
            $query->whereIn(
                'description', 
                ['Premium Membership Balance Top Up', 'Sign Up Bonus']
            )
            ->whereNotNull('extra_details');
        });
    })
    ->get();

Laravel 9.x Docs - Queries Logical Grouping