【问题标题】:Equivalent ORM Query in LaravelLaravel 中的等价 ORM 查询
【发布时间】:2017-10-10 06:33:50
【问题描述】:

以下是我的查询:

select nonrem_id as RefID  , (SELECT group_concat(concat(nonremu_updated_date, ' - ',name,' - ',ttu.nonremu_updates) SEPARATOR ',') FROM `fanda_bank_nonremit_update` as ttu left join fanda_mst_users on login_id = nonremu_createdby WHERE ttu.nonremu_cid = fanda_bank_acc_nonremitted.nonrem_id order by ttu.nonremu_id asc ) as Comments from `fanda_bank_acc_nonremitted` left join `fanda_mst_users` on `login_id` = `nonrem_created_by` where `nonrem_gl_date` >= 2017-02-01 and `nonrem_gl_date` <= 2017-05-11 and `nonrem_country` = BE

如何在 Laravel Eloquent ORM 中编写此查询。我曾尝试使用查询生成器,但我想知道如何在纯 ORM 中编写此查询。

P.S:我不应该在任何地方使用 DB::raw()。

请帮忙。

【问题讨论】:

    标签: laravel orm eloquent


    【解决方案1】:

    你不能,你需要DB::raw() 来构建这样的选择语句。

    编辑:

    如果您不关心在您的选择上使用DB::raw(),请在您的选择上尝试这样的操作:

    Model::select('nonrem_id as RefID',DB::raw('(SELECT group_concat(concat(nonremu_updated_date, ' - ',name,' - ',ttu.nonremu_updates) SEPARATOR ',') FROM `fanda_bank_nonremit_update` as ttu left join fanda_mst_users on login_id = nonremu_createdby WHERE ttu.nonremu_cid = fanda_bank_acc_nonremitted.nonrem_id order by ttu.nonremu_id asc ) as Comments'))
    

    如果您使用严格模式,它将抛出QueryException,因为您正在按未选择的字段对您的第一个查询进行排序,为避免此查询异常,请配置您的数据库连接以允许这种排序方式。您可以在文件中执行此操作:config/database.php,方法是将这两个参数添加到您的“连接”数组中的实际连接中:

      'strict' => true,
      'modes' => ['STRICT_TRANS_TABLES',
                  'NO_ZERO_IN_DATE',
                  'NO_ZERO_DATE',
                  'ERROR_FOR_DIVISION_BY_ZERO',
                  'NO_AUTO_CREATE_USER',
                  'NO_ENGINE_SUBSTITUTION'],
    

    【讨论】:

    • 谢谢@aaron0207。是否可以使用 selectRaw() 编写查询。如果是这样,那么我该如何编写上面的查询,其中选择中有一个选择。
    猜你喜欢
    • 2018-11-06
    • 2015-04-18
    • 1970-01-01
    • 1970-01-01
    • 2021-03-16
    • 2010-11-07
    • 2015-02-06
    • 1970-01-01
    • 2015-12-06
    相关资源
    最近更新 更多