如何在 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))