Laravel将JSON记录转换为Class实例

问题描述 投票:1回答:2

我有一个交易记录,其中包含一个包含JSON记录的Client列。

$t->client

{'id': 12, 'name': 'John'....}

我有一个Client

如何实例化一个新的Client类并为其分配$t->client JSON值?

$billedClient = new Client;
$billedClient = collect($t->client);

更新:该字段包含存储为JSON的数据,但在Transaction类中,它被转换为JSON,因此Laravel在代码中访问时将其转换为Array

更新2:我已根据@ mega6382的建议更改了我的代码,但它失败了。

$data = $transaction->client;
$client = new \App\Models\Client();
$client->set($data); 

这将返回Model.phppreg_match() expects parameter 2 to be string, array given中的错误

更新3:解决方案如下所示,没有json_encode

$clientCollection = Client::hydrate([$t->client]);
$client = $clientCollection->first();
php laravel
2个回答
1
投票

更多Laravelesque方式:

$clientCollection = Client::hydrate([json_decode($t->client, true)]);
$client = $clientCollection->first();

2
投票

您可以在Client类中创建一个setter,如下所示:

class Client {
    public function set($data) {
        foreach ($data AS $key => $value) {
            $this->{$key} = $value;
        }
    }
}

然后你可以使用json_decode解码json并将其对象转换为client,如下所示:

$data = json_decode($t->client, true);
$client = new Client();
$client->set($data);
© www.soinside.com 2019 - 2024. All rights reserved.