创建模型后,当我尝试获取他的属性时,我只得到数据库中已填充的字段。
----------------------------------------------
DB: | id | shopID | name | bottleID | capacity |
----------------------------------------------
| 1 | 8 | Cola | 3 | |
----------------------------------------------
在这种情况下,我也需要 capacity 属性,作为空字符串
public function getDrinkData(Request $request)
{
$drink = Drink::where('shopId', $request->session()->get('shopId'))->first();
if($drink) {
$drink = $drink->attributesToArray();
}
else {
$drink = Drink::firstOrNew(['shopId' => $request->session()->get('shopId')]);
$drink = $drink->attributesToArray(); // i want to get even empty fields
}
return view('shop.drink')->(['drink' => $drink])
}
但是为了以后使用(在视图中),我需要拥有所有属性,包括空属性。我知道这段代码可以正常工作,但我不知道如何更改它以检测所有属性。
原文由 Ivan Vulović 发布,翻译遵循 CC BY-SA 4.0 许可协议
通过从数据库中读取数据来填充模型属性。当使用
firstOrNew()
并且记录不存在时,它会创建一个new
模型对象的实例而不从数据库中读取,因此它具有的唯一属性将是手动分配的属性.此外,由于数据库中还没有记录,您不能只是重新读取数据库来获取丢失的数据。在这种情况下,您可以使用
Schema::getColumnListing($tableName)
获取表中所有列的数组。有了这些信息,您可以创建一个基本数组,将所有列名称作为键,null
用于所有值,然后合并到你的值Drink
对象。如果您使用的是
firstOrCreate()
,那么当一个记录不存在时会创建一个新记录。由于现在数据库中有记录,您可以简单地从数据库中重新读取记录以填充所有模型属性。例如: