我有一个交易记录,其中包含一个包含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.php
的preg_match() expects parameter 2 to be string, array given
中的错误
更新3:解决方案如下所示,没有json_encode
。
$clientCollection = Client::hydrate([$t->client]);
$client = $clientCollection->first();
更多Laravelesque方式:
$clientCollection = Client::hydrate([json_decode($t->client, true)]);
$client = $clientCollection->first();
您可以在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);