你好,我有一个用户的模型是additionalInfo
,所以如果用户填写了这个附加信息,它将获得奖励,所以我需要检查是否填写了这个附加信息的所有值。我的问题是,我需要检查每个值吗?我的意思是,我是否需要使用$clientAdditionalInfo\['adress'\]
按属性检查它,然后检查下一个$clientAdditionalInfo\['city'\]
,然后检查$clientAdditionalInfo\['province'\]
等...
或者我应该这样做。
public function isCompleted() {
$user = auth()->user();
$clientAdditionalInfo = $user->client->additionalClientInfo->where('client_id', $user->client->id)->get()->first();
if($clientAdditionalInfo){
$attributes = $clientAdditionalInfo->getAttributes();
foreach($attributes as $attribute) {
// HERE I COULD CHECK IF EVERY ATTRIBUTE IS FILLED?
}
}
}
尝试迭代每个属性,也许我应该检查每个属性是否isset
,然后如果所有additionalInfo
都已设置,则会给予奖励。但一旦所有属性都已设置,如何检查所有属性都已设置?
当我循环访问属性时,我看到最后一个值为null(在updated_at之后),但数据库中在数据库之后没有其他值,这可能是foreach的问题?数据库中只有一行,并且填充了所有值,如果我对foreach执行dump($key)
& dump($attribute)
,我会得到以下结果:
^ "id"
^ 1
^ "address"
^ "Calle test 123"
^ "city"
^ "Barcelona"
^ "province"
^ "Barcelona"
^ "postal_code"
^ "08010"
^ "web"
^ "https://www.test.com"
^ "phone"
^ "123456789"
^ "activity"
^ "Social"
^ "number_of_employees"
^ 150
^ "interest"
^ "Test"
^ "client_id"
^ 8
^ "created_at"
^ "2023-02-08 10:48:56"
^ "updated_at"
^ "2023-02-08 11:53:43"
^ null
我不知道这个空值是从哪里来的,它不应该...
好吧,我的错,我是检查它badm我应该检查它从$request-〉all()。这样我就可以检查没有created_at
和updated_at
的值,所以我可以更具体,更好地检查它。
2条答案
按热度按时间daolsyd01#
最简单的方法是像你在问题中建议的那样有一个循环:
然而,这并不总是容易的。有时候,属性的默认值不是
null
,而是设置为默认值。例如,您可能具有'NOTSET'
、'UNINITIALIZED'
、'INITIALIZED'
、'FINALIZED'
等值。在这种情况下,您需要检查该值是否为'NOTSET'
。此外,你的属性可能默认为0,而正确的值是严格正的(例如价格)。2因此,你可能有更多的函数/标准来评估你可能拥有的不同种类的属性。另外,很有可能你在某个地方有一个
null
值,但是它是完美的,并且被正确地初始化了,例如,死亡日期是未知的,也就是说,null
代表的是目前还活着的人。此外,很有可能你有一个复合属性,比如一些项目,它是一个项目数组,每个项目都有自己的属性,在这种情况下,你需要为它们循环,所以为数组或
StdClass
对象等可迭代集合实现function
是有意义的。最后,您可能有一些对象示例需要作为附加信息的属性进行特殊评估。例如,如果健康状况是附加信息的一部分,则健康状况可能是一个独立的对象。
您可以将
json_encode
这样的对象,然后将json_decode
放入一个数组中,并将其作为属性数组进行处理(嵌套与否)。或者,你可以为你的类创建一个期望属性的数组,然后循环它。后者的优点是如果你愿意,允许一些属性不被初始化,但是,缺点是你需要注意它,并且可能需要调整它。2你也可以半自动地做这件事,方法是在每次构建/部署时跟踪新属性,并假设新属性是必需的。但是,回到最简单的方法,它看起来像这样:
上面的方法没有经过测试,你可能需要在你的情况下用稍微不同的方法来执行,这取决于你的对象和集合看起来是如何相似的,但是这个想法是循环属性,看看每个属性是否设置正确,如果没有,返回false。一旦所有的东西都检查过了,并且发现初始化正确,返回true。
pw9qyyiw2#
使用array_filter
如果未提供回调,则删除数组中所有等于FALSE的项。