我想从从数据库中获取的Array()创建一个雄辩的模型,该Array已经是数据库中存储的某些模型的toArray()
。我可以使用以下代码来做到这一点:
$model = Admin::hydrate($notification->data);
$notification->data = [
"name" => "abcd"
"email" => "abcd@yahoo.com"
"verified" => 0
"shopowner_id" => 1
"id" => 86
"shopowner" => [
"id" => 1
"name" => "Owner1"
"email" => "owner1@owner.com"
]
];
但是我无法访问$model->shopowner->name
我必须使用$model->shopowner['name']
我想使用相同的通知类别,而无需进行任何特定的更改来访问数据。
答案 0 :(得分:1)
我认为这是对ORM模型的无效使用。当您可以根据需要更改数组时:
$notification->data['shopowner'] = (object) $notification->data['shopowner'];
$model = Admin::hydrate($notification->data);
您的模型将不起作用,因为“店主”将作为一种属性而不是一种关系存在,因此,当您尝试将此模型用于除检索数据以外的任何其他操作时,都会导致异常。
答案 1 :(得分:1)
如果您想以关联关系访问fillna
,则必须手动添加它:
df.fillna({k: df.A for k in df})
A B C D
0 3 2.0 3.0 0.0
1 5 4.0 2.0 5.0
2 7 7.0 7.0 5.0
3 9 3.0 9.0 4.0
答案 2 :(得分:0)
您不能将数组数据作为对象访问,您可以做的是重写属性并在模型中创建对象的实例,这样就可以使用它了。例如:
public function getShopownerAttribute($value)
{
return new Notification($value); // or whatever object here
}
class Notification {
public function __construct($data)
{
// here get the values from your array and make them as properties of the object
}
}
答案 3 :(得分:0)
自从我使用laravel以来已经有一段时间了,但是据我了解,一旦您使用hydrate,就会得到一个Illuminate\Database\Eloquent\Collection
对象,该对象包含模型类。
但是,这些属性可能具有嵌套时会延迟加载的属性。
使用集合fresh方法可以像使用load missing一样帮助获取完整的数据库对象
答案 4 :(得分:0)
解决方案:
感谢@Devon和@Junas。通过结合他们的代码,我找到了这个解决方案
$data = $notification->data;
$data['shopowner'] = (object) $data['shopowner'];
$model = Admin::hydrate([$data])[0];