如何在没有 DB 的情况下将 sql 查询更改为 laravel 模型查询

Posted

技术标签:

【中文标题】如何在没有 DB 的情况下将 sql 查询更改为 laravel 模型查询【英文标题】:how to change sql query to laravel model query without DB 【发布时间】:2021-06-19 11:00:14 【问题描述】:

我打算将 sql 查询更改为没有 DB 的 laravel 模型查询。 DB 表示illuminate\Fascade\DB

   ->join(array(\DB::expr('(select SUM(p.amount) as paid, p.case_id
                        from payments p
                        where p.status_id = 3
                        group by p.case_id)'),'p'), 'LEFT')->on('p.case_id','=','c.id')

这是fuelphp的sql查询。 我想用 laravel 模型风格改变它。 如何转换?

【问题讨论】:

【参考方案1】:

猜测整个 sql 查询非常困难,但通常需要两个模型。你需要create relations between them,然后你才能使用 Eloquent。

例如有两个模型(读取表) - 用户和付款:

class User extends Model

    public function payments(): HasMany
    
        return $this->hasMany(Payment::class);
    


class Payment extends Model

    public function user(): BelongsTo
    
        return $this->belongsTo(User::class);
    

然后你可以创建 Eloquent 查询:

Payment::with('user')->where('status_id', 3)->sum('amount')

【讨论】:

我想为子查询创建别名。那么,我们可能会认为子查询就是其他表,实现leftjoin。 [itsolutionstuff.com/post/…

以上是关于如何在没有 DB 的情况下将 sql 查询更改为 laravel 模型查询的主要内容,如果未能解决你的问题,请参考以下文章

如何在不丢失 Xampp 中的数据的情况下将类型从 varchar 更改为 Date

如何在不等待结果的情况下将 SQL 查询发送到 PHP 中的数据库

有没有办法在 CodeIgniter *不*使用 ActiveRecord 的情况下将参数传递给查询?

R8 在没有 -allowaccessmodification 标志的情况下将抽象类的“受保护”方法更改为“公共”

有没有办法在不将 dtype 更改为对象的情况下将 NaT 附加到带有时区的 pandas 日期时间?

如何在不覆盖 ModelForm 中的字段定义的情况下将 ManyToManyField 小部件更改为 CheckboxSelectMultiple