【问题标题】:laravel : how to filter records from database sidelaravel:如何从数据库端过滤记录
【发布时间】:2018-09-30 01:32:37
【问题描述】:

如何过滤数据库端的记录?我的意思是当我使用类似的东西时

model::whereIn('id' , [1,2,3] )->get(['id' , 'name']) 

它检索所有列的记录,然后在 PHP 端过滤它们。无论如何要过滤 db 端的 rocords 吗?

【问题讨论】:

  • 这不是真的。列已在数据库中过滤。为什么你认为他们没有?

标签: php laravel eloquent


【解决方案1】:

您的代码已经这样做了 get(['id', 'name']) 在执行查询之前会在内部覆盖 SQL select 列。它不会获取所有列,然后过滤掉不必要的列。

它与其他答案中建议的->select('id', 'name')->get() 完全相同,只是使用的较短版本(Laravel 有很多这些替代方法允许开发人员使用他们认为正确/可读的任何东西)。

如果需要,您可以通过以下方式转储执行的最后一个查询:

DB::enableQueryLog();

YourModel::whereIn('id' , [1,2,3])->get(['id' , 'name']);

dd(DB::getQueryLog());

您会看到它输出以下查询:

select `id`, `name` from `your_model` where `id` in (?, ?, ?)

【讨论】:

    【解决方案2】:
    Model::whereIn('id' , [1,2,3] )->select('id', 'name')->get();
    

    要验证您是否在数据库端进行过滤,请将 get 替换为 toSql()

    $result = Model::whereIn('id' , [1,2,3] )->select('id', 'name')->toSql(); 
    dd ( $result );
    

    你会得到以下结果

    “选择id, name from model where id in (?, ?, ?)”

    【讨论】:

      【解决方案3】:

      试试这个

      model::whereIn('id' , [1,2,3] )->select('id', 'name')->get() 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-03
        • 2017-08-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-04-15
        相关资源
        最近更新 更多