需要';转换';对Eloquent的MySQL查询;从哪里开始/如何思考


Need to 'convert' an MySQL-query to Eloquent; where to start / how to think?

我想将原始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本身的文档也没有多大帮助。

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

我目前在我的模型中有什么:

情节:`类事件扩展模型{使用SoftDeletes;使用App''History;//历史模型

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();
}

} And my history model looks like this: 类历史扩展模型{使用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 */

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

如果您想执行这种查询类型,我建议您使用Laravel query Builder。查看文档

处理复杂查询时,最好的建议是保持原始状态。除此之外,你还有模型可以帮助你,因为当这个查询发生变化时,需要再次进行大量编辑和重组,以将其融合到完美的状态。

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');