laravel collection all() 方法中如何哈希id值

How hash id value in laravel collection all() method

我正在尝试加密 laravel all() 方法在我看来返回的 id。

我的模型

    protected $table = 'product';

    protected $fillable = [
        'id_product', 'code_product', 'name','total_stock','id_category','id_brand'
    ];

    protected $primaryKey = 'id_product';

我想在id_product列中添加类似bcrypt的东西,因为我在请求api中使用了vue组件,returns所有产品,它显示解密在到达视图之前,从那里做是没有用的,这就是为什么我从这里直接看作为加密器。

这是控制器的方法

    public function all(){
        return $this->successResponse(Product::with('category','brand')->get());
    }

有什么想法吗?谢谢。

查看这些方法中的 Accessors and Mutators as a way to encrypt the value on the way out, and decrypt it on the way in. Then you can just use the encryption helpers

我可以想到 3 种处理方式 - 不公开 ID

选项 1:访问器和修改器

class Product extends Model
{
     public function getIdProductAttribute($value)
    {
        return encrypt($value);
    }

    public function setIdProductAttribute($value)
    {
        $this->attributes['id_product'] = decrypt($value);
    }
}

选项 2:在控制器方法中处理 encryption/decryption

public function all()
{
    return $this->successResponse(
        Product::with(['category', 'brand'])
            ->get()
            ->map(function($product){
                $product->id_product = encrypt($product->id_product);
                return $product;
            })
    );
}

//When you get the data back in say an update request handle decryption in the update method of controller

选项 3:使用 slug/uuid 并从数组中隐藏 id

在产品上定义一个新列 table 唯一 slug 或一个列来存储 uuid 然后使用这个新列来唯一标识产品中的记录 table

并在产品模型中将 id 列保留在 $hidden class

class Product extends Model
{
    protected $hidden = ['id'];
}