Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php laravel转换为字符串mysql_Php_Mysql_Sql_Laravel - Fatal编程技术网

Php laravel转换为字符串mysql

Php laravel转换为字符串mysql,php,mysql,sql,laravel,Php,Mysql,Sql,Laravel,我用laravel编写了这段代码,我想知道如何在不使用laravel的情况下用纯SQL编写它,就像这样 Route::get('popular', function(){ $media = Media::where('active', '=', '1')->join('media_likes', 'media.id', '=', 'media_likes.media_id')->groupBy('media_likes.media_id')->orderBy(

我用laravel编写了这段代码,我想知道如何在不使用laravel的情况下用纯SQL编写它,就像这样

    Route::get('popular', function(){

    $media = Media::where('active', '=', '1')->join('media_likes', 'media.id', '=', 'media_likes.media_id')->groupBy('media_likes.media_id')->orderBy(DB::raw('COUNT(media_likes.id)'), 'DESC')->select('media.*')->paginate(30);

    $data = array(
        'media' => $media,
        'categories' => Category::all(),
        'pages' => Page::all(),
        'settings' => Setting::first(),
        );

    return View::make('Theme::home', $data);

});
大概是这样的:

SELECT m.* 
FROM
media m
JOIN 
media_likes ml
ON
ml.media_id = m.id
GROUP BY 
ml.media_id
ORDER BY
COUNT(ml.id) DESC
Media::skip(2 * 30)->take(30)->toSql();
使用
toSql
方法 Laravel查询生成器有一个名为
toSql
的有用方法,可以方便地查看最终的SQL查询

现在,当您调用
paginate
方法时,您将得到一个
Paginator
,您将无法调用
toSql
方法

解构
paginate
使用
paginate
时,Laravel将对每个
$page
进行以下查询:

// Let's simplify the query for now
Media::skip(($page - 1) * $perPage)->take($perPage);
知道了这一点,您可以使用查询生成器的方法
toSql
,您将看到实际的sql字符串

由于
$page=3
$perPage=30
,并且该表的名称为media,您将得到如下结果:

SELECT m.* 
FROM
media m
JOIN 
media_likes ml
ON
ml.media_id = m.id
GROUP BY 
ml.media_id
ORDER BY
COUNT(ml.id) DESC
Media::skip(2 * 30)->take(30)->toSql();
从介质限制30偏移量60中选择*


现在,对于实际查询,您可以使用以下内容查看第3页的结果SQL字符串(作为示例):


或者,您可以在
AppServiceProvider
中设置事件侦听器,并记录应用程序执行的每个SQL查询

public function boot()
{
    \DB::listen(function ($query) {
        \Log::debug($query->sql);
        \Log::debug($query->bindings);
        \Log::debug($query->time);
    });
}