如何在 Laravel 中转换我的 MySql 查询
how to convert my MySql query in Laravel
我有点困惑我的查询如何在 laravel..
中转换
select users.username,users.photo, questions.*,
(Select count(*) from answers
where answers.q_id=questions.id) as aAccount from questions
INNER JOIN users ON users.id=questions.user_id
使用原始查询
这些表达式将作为字符串注入到查询中,因此请注意不要创建任何 SQL 注入点!要创建原始表达式,您可以使用 DB::raw 方法
DB::table('questions')
->join('users', 'users.id', '=', 'questions.user_id')
->select('users.username','users.photo', 'questions.*',
DB::raw("
( Select count(*) from answers
where answers.q_id=questions.id
)as 'aAccount'")
->get();
我赞成 JYoThl 的回答,因为这正是我将此查询分解为 eloquent 的方式,尽管在 Eloquent 查询的一部分变成原始查询的情况下,我个人更喜欢保留整个 sql生的。如果需要,您仍然可以向其中注入变量。
根据我的经验,当您返回代码重新阅读它时,将使用像这样规范化更复杂的查询所花费的时间。
以下是您如何以原始格式传递 sql。我还喜欢将数组转换为集合,因为集合提供了多种方法。希望这对您有所帮助!
$questions = collect(DB::select( DB::raw("
select users.username,users.photo, questions.*,
(Select count(*) from answers where answers.q_id=questions.id) as aAccount
from questions
INNER JOIN users ON users.id=questions.user_id")
));
如果要注入变量,可以将变量添加到 array() 区域。如果你想这样做,你会做这样的事情:
DB::select( DB::raw("select * from user where user = :user"), array('user' => $user))
我有点困惑我的查询如何在 laravel..
中转换select users.username,users.photo, questions.*,
(Select count(*) from answers
where answers.q_id=questions.id) as aAccount from questions
INNER JOIN users ON users.id=questions.user_id
使用原始查询
这些表达式将作为字符串注入到查询中,因此请注意不要创建任何 SQL 注入点!要创建原始表达式,您可以使用 DB::raw 方法
DB::table('questions')
->join('users', 'users.id', '=', 'questions.user_id')
->select('users.username','users.photo', 'questions.*',
DB::raw("
( Select count(*) from answers
where answers.q_id=questions.id
)as 'aAccount'")
->get();
我赞成 JYoThl 的回答,因为这正是我将此查询分解为 eloquent 的方式,尽管在 Eloquent 查询的一部分变成原始查询的情况下,我个人更喜欢保留整个 sql生的。如果需要,您仍然可以向其中注入变量。
根据我的经验,当您返回代码重新阅读它时,将使用像这样规范化更复杂的查询所花费的时间。
以下是您如何以原始格式传递 sql。我还喜欢将数组转换为集合,因为集合提供了多种方法。希望这对您有所帮助!
$questions = collect(DB::select( DB::raw("
select users.username,users.photo, questions.*,
(Select count(*) from answers where answers.q_id=questions.id) as aAccount
from questions
INNER JOIN users ON users.id=questions.user_id")
));
如果要注入变量,可以将变量添加到 array() 区域。如果你想这样做,你会做这样的事情:
DB::select( DB::raw("select * from user where user = :user"), array('user' => $user))