Php 是否可以将子查询SQL转换为Laravel?

Php 是否可以将子查询SQL转换为Laravel?,php,laravel,mariadb,Php,Laravel,Mariadb,是否可以更改此SQL以使其在Laravel上工作 SELECT name, event,m.season_id, tm.played_pugs, active, m.created_at, datediff(now(),m.created_at) FROM matchs m LEFT OUTER JOIN seasons ON seasons.id = m.season_id JOIN ( SELECT season_id, max(matchs.created_at) as MaxDate,

是否可以更改此SQL以使其在Laravel上工作

SELECT  name, event,m.season_id, tm.played_pugs, active, m.created_at, datediff(now(),m.created_at)
FROM matchs m
LEFT OUTER JOIN seasons ON seasons.id = m.season_id
JOIN ( SELECT season_id, max(matchs.created_at) as MaxDate, count(season_id) as played_pugs
                  FROM matchs
                  GROUP BY season_id) tm on m.season_id = tm.season_id and m.created_at = tm.MaxDate
ORDER BY played_pugs descc>
这就是我到目前为止所做的:

$seasons = DB::table('matchs')
    ->select('name', 'event', 'season_id', 'played_pugs', 'active', DB::raw('datediff(now(),created_at) as days'))
    ->join('seasons', 'seasons.id', '=', 'matchs.season_id', 'left outer')
    ->join(DB::raw('SELECT season_id, max(matchs.created_at) as MaxDate, count(season_id) as played_pugs FROM matchs GROUP BY season_id)'), '')
    ->orderBy('played_pugs','desc')
    ->get();

此外,我无法再看到值为0的“played_pugs”的值。我如何解决这个问题。

这将生成您发布的确切查询。我使用一个单独的查询生成器对象构建了连接子查询,并使用
toSql()
方法使用
DB::raw()
获取要注入的生成的SQL字符串,因为这种方式可读性更高,而且100%是使用查询生成器语法构建的

$joinSubquery=DB::table('matchs'))
->选择('seasure_id',DB::raw('max(matchs.created_at)as MaxDate'),DB::raw('count(seasure_id)as played_pugs'))
->groupBy('seasure_id')
->toSql();
$seasons=DB::表('matchs m')
->选择('name'、'event'、'm.seasure\u id'、'tm.played\u pugs'、'active'、'm.created\u at',DB::raw('datediff(now(),m.created\u at'))
->leftJoin('seasons'、'seasons.id'、'='、'm.seasons\U id'、'')
->join(DB::raw(“(“$joinSubquery.”)tm”),函数($join)
{
$join->on('m.seasure\u id','=','tm.seasure\u id');
$join->on('m.created_at'、'='、'tm.MaxDate');
})
->orderBy('played_pugs','desc')
->get();

到目前为止,您尝试过什么吗?试着阅读开始,如果你不能让它工作,请在这里发布你到目前为止所做的。
$seasures=DB::table('matchs')->select('name','event','seasure\u id','played\u pugs','active',DB::raw('datediff(now(),created\u at)as days')->join('seasons'、'seasons.id'、'='、'matchs.seasons_id'、'left outer')->加入(DB::raw('SELECT seasons_id,max(matchs.created_at)作为MaxDate,count(seasons_id)作为按季节从matchs组中按季节_id播放的哈巴狗),'->orderBy('played_哈巴狗','desc'))->get()谢谢你的回答。但是如何分配M和TM(M=来自matchs)以及TM(子查询)。当我使用您的查询时,我遇到了以下问题SQLSTATE[42S02]:找不到基表或视图:1146表'ebotv3.matchs m'不存在(SQL:select
name
,…错误表明数据库中找不到该表,这并不意味着查询不正确。表名拼写是否正确
matchs
?是的,该表名为
matchs
,他认为它是
matchs m
而不是
matchs
。修复了它,谢谢!+1似乎我需要d将AS函数添加到matchs中。这是我认为使用子查询的最佳方式。(snide备注)Laravel是否使编写SQL更容易?