如何将数据库查询构建器转换为 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'])->where('users.name','LIKE','%'.$q.'%') ->orWhere('users.email','LIKE','%'.$q.'%') ->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