如何将此原始 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();
我一直在尝试将原始 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();