当前位置: 首页 > 知识库问答 >
问题:

需要将MySQL查询“转换”为雄辩的查询;从哪里开始/如何思考?

范福
2023-03-14

我想将原始SQL查询“转换”为Eloquent,这样我也可以附加渴望加载的模型,这样我就不必编辑我得到的一些模板。问题是,查询得到了一些子查询,我不知道如何将查询“转换”为Eloquent的格式。问题是:

SELECT
     e_eh.id,
     s.name as serie,
     s.id as serie_id,
     e_eh.season,
     e_eh.episode,
     e_eh.name,
     eh1.prog_trans,
     eh1.prog_check,
     eh1.prog_sync,
     eh1.avi
FROM (
    SELECT
        e.*
        , (
            SELECT
                eh.id
            FROM episode_histories AS eh
            WHERE 1
            AND eh.episode_id = e.id
            ORDER BY
                eh.id DESC
            LIMIT 1
        ) AS eh_id
    FROM episodes AS e
    WHERE 1
    AND e.completed = 0
    AND e.deleted_at IS NULL
) AS e_eh
INNER JOIN episode_histories AS eh1 ON e_eh.eh_id = eh1.id
INNER JOIN series as s ON s.id = e_eh.serie_id
ORDER BY prog_trans DESC, prog_check DESC, prog_sync DESC

我已经尝试了一些方法,但没有一种有效。我有点被困在如何“思考”这件事上了。来自Laravel本身的文档也没有多大帮助。

简而言之:我有两个模型,一个是剧集,另一个是episode_histories,它存储了相关剧集的一些历史。第三个模型是展示模型,它的相关展示。我需要得到一集,与相关的节目模型(在我的模型中已经是一个关系)。但是我也需要得到给定剧集的最新episode_histories模型。

我目前拥有的模型:

Episode:'class Episode扩展了Model{use SoftDelites; use App\历史;//历史模型

protected $table        = 'episodes';
protected $primaryKey   = 'id';
public    $timestamps   = true;

/**
 * The attributes that should be mutated to dates.
 *
 * @var array
 */
protected $dates = ['deleted_at'];

/* Eloquent relations */
public function show() {
    return $this->belongsTo('App\Serie', 'serie_id', 'id');
}

public function history() {
    return $this->hasMany('App\History', 'episode_id', 'id')->orderBy('id', 'desc');
}

public static function getEpisodes2() {
    return DB::select();
}

}我的历史模型如下所示:类历史扩展模型{use SoftDeletes;

protected $table        = 'episode_histories';
protected $primaryKey   = 'id';
public    $timestamps   = true;

/**
 * The attributes that should be mutated to dates.
 *
 * @var array
 */
protected $dates = ['deleted_at'];

/* Eloquent relations */
public function episode() {
    return $this->belongsTo('App\Episode');
}

public function user() {
    return $this->belongsTo('App\User', 'user_id', 'id');
}

/* Custom functions */

}`我希望有人能帮我解决这个问题。如果缺少信息,请让我知道,这样我就可以添加。

共有2个答案

呼延辰龙
2023-03-14

处理复杂查询时,最好的建议是保持原始。除此之外,你还有帮助之手的模型,因为当这个查询发生变化时,会有很多编辑和重新洗牌来将它混合到一个完美的状态。

DB:statement("your query")

如果你有程序,那么:

DB::statement('CALL PROCEDURE_NAME(:id,@name,@email);',array($id);
$result = DB:select('select @name as alias_name, @email as alias_name');
巫马星雨
2023-03-14

如果您想使用这种查询类型,我建议您使用Laravel查询生成器。请看一下文档

 类似资料:
  • 我使用了cakephp Mysql到mongodb查询组件,即将Mysql查询转换到mongodb中,但是当查询有多个括号时代码停止工作,我还尝试将http://www.querymongo.com/site上的查询转换为相同的问题,

  • 这是我的原始查询。 DB::raw(“根据id DESC LIMIT 1从tble中选择*,其中status=1,now()介于开始时间和结束时间顺序之间”) 如何将此转换为Laravel雄辩?

  • 问题内容: 我想从数据库中删除某些项目。我有以下查询: 这有效,并返回2个结果。 现在,我想将此查询转换为查询。但是,以下操作无效: MySQL引发以下错误: 1064-您的SQL语法有误;检查与您的MySQL服务器版本相对应的手册以获取正确的语法,以在第1行的“ WHERE entry.sheetID = sheets.id ANDsheets.clientID = 13”附近使用 我在这里做错

  • 问题内容: 我需要将此查询从MySQL格式转换为SQLite。我正在尝试自己,但发现了一些困难。 在SQLite中,curdate()和interval函数不存在。 问题答案: 这是基本语法: 我忽略了该子句,因为这些日期是过去1000多个日期,因此他们无论如何都不会选择任何内容。

  • 问题内容: 在我的MySQL模式中,我有表 在MSSQL中,我进行了CTE查询(从下至上为提供的类别ID构建类别树: 如何将该查询“转换”为MySQL? 问题答案: 不幸的是,MySQL不支持CTE(公用表表达式)。IMO早就该这样做了。通常,您可以只使用子查询来代替,但是这种特定的CTE是 递归的 :它在查询中引用自身。递归CTE对于分层数据非常有用,但同样:MySql根本不支持它们。您必须实现

  • 我在Mysql中有一个查询, 我已经完成了简单的查询转换为hibernate查询。我将所有pojo类绑定到表。请指导我如何将多个连接查询转换为一个hibernate查询。