当我使用eloquent时,我可以使用"where"方法,然后使用"get"方法来填充包含我在数据库中 Select 的内容的对象.

$users = User::where('gender', 'M')->where('is_active', 1)->get(['pseudo', 'email', 'age', 'created_at'])->toArray();

在这里,我可以 Select 想要获取的列,如"伪"、"邮箱"等. 但我在"Laravel doctor "中错过的是做相反事情的方式. 可能是这样的:

$users = User::where('gender', 'M')->where('is_active', 1)->notGet(['pseudo', 'email', 'age', 'created_at'])->toArray();

谢谢你future 的回答,祝你有愉快的一天.

推荐答案

如果您只需要从模型的数组或JSON表示中隐藏属性,则可以使用一种或两种方法:

  • 添加 $hidden属性添加到您的模型
    class User extends Model
    {
        /**
         * The attributes that should be hidden for arrays.
         */
         protected $hidden = ['password'];
    }
    
  • 使用

有关更多详细信息,请参阅其他答案...But有时你不想加载大量数据(地理空间、html、日志(log)等)在你的应用程序中,它会很慢,占用更多内存.OP要求进行SQL查询,因此我给出了答案,但大多数情况下,只隐藏JSON响应中的数据更方便.


另外,SQL中没有明确排除列的内置选项,所以Laravel无法做到这一点.但你可以试试this trick

Update

另一个技巧是指定模型中的所有列(或者使用额外的查询从this answer中获取使用$this->getTableColumns()的所有列,也可以在每次迁移后对其进行缓存,以避免两个查询),然后添加local scope函数

// The below code requires you to define all columns in $columns.
// A better approach is to query the schema of the table and cache it after each  
// migration, for more details: https://stackoverflow.com/a/56425794/3192276

protected $columns = ['id','pseudo','email'];

public function scopeExclude($query, $value = []) 
{
    return $query->select(array_diff($this->columns, (array) $value));
}

然后你可以做:

$users = User::where('gender', 'M')
    ->where('is_active', 1)
    ->exclude(['pseudo', 'email', 'age', 'created_at'])
    ->toArray();

Php相关问答推荐

PHP DOMDocument忽略第一个表S结束标记

自定义通知在Woocommerce我的帐户自定义端点页面上不起作用

LaravelEloquent 地根据表中的值提取记录

WooCommerce/WordPress:简单的产品属性显示

在WooCommerce产品变体SKU字段旁边添加自定义输入字段

根据未用于变体的产品属性隐藏WooCommerce发货方式

允许客户定义特定WooCommerce产品的价格

模仿GUZLE中的curl 工作脚本(分块数据和二进制上传一起)

上传WordPress模板中的翻译文件(.mo和.po)

从WooCommerce订单项目获取Dokan卖家详细信息

Mockery在模拟Redis连接时抛出错误:Mockery\Exception\BadMethodCallException

从 WooCommerce 购物车中删除总计部分,同时保留小计行

当未 Select 任何变体时,在 WooCommerce 可变产品上显示自定义文本

标签打印机的 CSS

如何限制 woocommerce 中相关产品的标题长度

PHP 解析 XML 以获取多个深度的所有字符串值

在 php 中生成 MAC ISO/IEC 9797-1

根据页面的最后修订日期设置 MediaWiki 内部链接的样式

无法在 Laravel 10 中安装 jenssegers/mongodb

NetBeans 不显示中文内容