如何将数据库查询构建器转换为 Eloquent 模型

Posted

技术标签:

【中文标题】如何将数据库查询构建器转换为 Eloquent 模型【英文标题】:How to convert database query builder into Eloquent models 【发布时间】:2019-06-09 02:07:46 【问题描述】:

我需要将数据库查询构建器转换为 Eloquent 模型。我正在使用插件https://github.com/Kyslik/column-sortable,它需要一个 Eloquent 模型。

<?php

$payments = DB::table('users')
    ->select('orders.id', 'users.id', 'users.name', 'orders.amount', 'orders.created_at', 'orders.updated_at')
    ->join('patients', 'users.id', '=', 'patients.user_id')
    ->join('orders', 'patients.id', '=', 'orders.patient_id')
    ->where('users.name', 'LIKE', '%' . $q . '%')
    ->orWhere('users.email', 'LIKE', '%' . $q . '%')
    ->get();

【问题讨论】:

定义模型,以及它们的关系,然后它会变得很简单:User::with(['patients','orders'])-&gt;where('users.name','LIKE','%'.$q.'%') -&gt;orWhere('users.email','LIKE','%'.$q.'%') -&gt;get();,如果您需要更多帮助,请发布您的模型及其关系 【参考方案1】:

在你的控制器方法中调用你的模型。

$companyObj = new modelname();
$userDetail = $companyObj->model_method_name($request);

【讨论】:

【参考方案2】:

尝试在您各自的模型中声明雄辩的关系,如下所示:

    class Users extends Model 
     public function patients()
          return this->hasOne('App\Patients', 'user_id', 'id')->with('orders');
     
    

   class Patients extends Model 
       public function orders() 
           return this->hasMany('App\Orders', 'patient_id', 'id')->select('id', 'amount', 'created_at', 'updated_at');
       
   

现在在用户存储库/控制器的 eloquent 查询中调用这些关系:

$payments = $this->getModel()->select('id', 'name')->with('patients')->where('name','LIKE','%'.$q.'%')->orWhere('email','LIKE','%'.$q.'%')->get();

【讨论】:

以上是关于如何将数据库查询构建器转换为 Eloquent 模型的主要内容,如果未能解决你的问题,请参考以下文章

如何将左连接横向 SQL 查询转换为 Laravel Eloquent 查询?

如何将其转换为 Query builder 或 eloquent? [复制]

如何将复杂的 sql 查询转换为 laravel Eloquent

使用 Laravel 的查询构建器或 Eloquent 将一个表与一个临时表进行内部连接

如何将原生 PHP 转换为查询构建器 Laravel?

如何将此查询从SQL(mysql)转换为Eloquent(Laravel)