首页 > 解决方案 > 我怎么能用 eloquent 为 laravel 8 写这个查询

问题描述

我在 laravel 8 上编写查询时遇到问题。

我有这个模型:

class ScrittureBilancio extends Model
{
    use HasFactory;
    protected $table = 'scritturebilancio';
    protected $fillable = ['CodiceConto','IdLibroMastro','IdRubrica','IdIniziativa',
        'Data','Importo','Segno','Descrizione','Esercizio','Competenza'];
    protected $primaryKey = 'idscritturebilancio';
    
    public function Rubrica() {
        return $this->belongsTo(Rubrica::class,'IdRubrica', 'idRubrica');
    }
    
    public function Iniziativa() {
        return $this->belongsTo(Iniziative::class,'IdIniziativa', 'idiniziativa');
    }
    
}

class Iniziative extends Model
{
    use HasFactory;
    protected $table = 'iniziative';
    protected $fillable = ['Denominazione','IdStruttura','IdAgenzia','TipoIniziativa','StatoIniziativa'];
    protected $primaryKey = 'idiniziativa';
    
    public function Agenzia() {
        return $this->belongsTo(Agenzie::class,'IdAgenzia', 'idagenzia');
    }
    
    public function Struttura() {
        return $this->belongsTo(StruttureIniziativa::class,'IdStruttura','idstrutturainiziativa');
    }
       
}

class StruttureIniziativaPianoConti extends Model
{
    use HasFactory;
    protected $table = 'struttureiniziativepianiconti';
    protected $fillable = ['CodiceBilancio','Descrizione','IdStruttura','CodiceVoceMIRWEB','IdPadre',
        'Natura','Riferimento','Gestione','ControPartita','Tipo'];
    protected $primaryKey = 'id';
    
    public function Struttura() {
        return $this->belongsTo(StruttureIniziativa::class,'IdStruttura', 'idstrutturainiziativa');
    }
}

我必须雄辩地写下这个查询:

SELECT * FROM scritturebilancio LEFT JOIN iniziative on scritturebilancio.idiniziativa=iniziative.idiniziative LEFT JOIN struttureiniziativepianiconti ON iniziative.idstruttura=struttureiniziativepianiconti.id WHERE codiceConto IN (SELECT codicebilancio FROM struttureiniziativepianiconti) WHERE natura3 AND 'CodiceConto

有人能帮我吗?我是 php 和 laravel 的新开发人员。谢谢大家。

标签: phpmysqleloquentlaravel-8

解决方案


使用这种格式的查询

ScrittureBilancio::select('*')
                ->leftjoin('iniziative','scritturebilancio.idiniziativa','=','iniziative.idiniziative')
                ->leftjoin('struttureiniziativepianiconti','iniziative.idstruttura','=','struttureiniziativepianiconti.id')
                ->whereRaw('scritturebilancio.codiceConto IN (SELECT codicebilancio FROM struttureiniziativepianiconti WHERE natura="Costi") AND scritturebilancio.idiniziativa=193')
                ->get();

推荐阅读