在转换为模型时,是否可以忽略laravel-data对象的属性?

t0ybt7op  于 2023-06-30  发布在  其他
关注(0)|答案(2)|浏览(114)

我使用spatie/laravel-data来处理一些最终插入数据库的数据。
我需要做的一件事是在计算时对一些东西求和并求平均值,我已经(可能不明智地)将运行总和作为一个属性(让我们称之为$myDataObject->runningTotal)存储在我的Laravel数据模型上。每个其他属性都可以直接Map到数据库列。
最后,我执行了一个MyEloquentModel::insert($myDataCollection->toArray());命令,但是现在我添加了这个runningTotal属性,我得到了一个错误,因为Eloquent试图插入到一个不存在的列。
在将我的laravel-data对象转换为Eloquent模型时,我想完全忽略该属性,但我看不到如何做到这一点。

5lhxktic

5lhxktic1#

您可以在DTO中定义一个自定义函数来过滤runningTotal

<?php

namespace App\Data;

use Spatie\LaravelData\Data;

class SomeData extends Data
{
    public function __construct(
        public string $someData,
        public int $runningTotal,
    ) {
    }

    public function someData(): array
    {
        return $this->except('runnigTotal')->toArray();
    }
}

然后你这样叫:

MyEloquentModel::insert($myDataCollection->someData())
rqdpfwrv

rqdpfwrv2#

您可以在提交之前使用以下命令取消设置属性:

unset($myDataCollection->runningTotal);

这不是Laravel的方式,但它使用了PHP的内置方法。

相关问题