如何在Laravel中转换我的MySql查询

时间:2017-04-25 06:59:15

标签: mysql laravel laravel-5.4

我有点困惑我的查询如何在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

2 个答案:

答案 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))