我有点困惑我的查询如何在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
答案 0 :(得分:2)
使用原始查询
这些表达式将作为字符串注入到查询中,因此请注意不要创建任何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();
答案 1 :(得分:1)
我赞成JYoThl答案,因为我正是将这个查询细分为雄辩的,尽管在你的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))