我想将原始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');