如何从同一个表上的json列数据创建关系?

时间:2018-05-02 17:20:39

标签: eloquent json-api

我有类似下表(tablename = applications):

| id            | applicants    |  
| ------------- | ------------- | 
| uuid-123-abc  | [{'first_name':'Dave'},{'first_name':'Steve'}] | 

我需要能够为它创建一个关系,所以我可以去:

$application->applicants和(在此示例中)获取包含两个Applicant模型的集合。

我假设我在某处需要申请人模特课程。但我甚至不确定是否可以这样做,因为没有applicant表。

我正在尝试:

public function applicants()
{
    return Collection::make([$this->applicants]);

但这不是一种关系,我试图让它与Neromerx JsonApi一起使用。

事实上,如果有一种方法可以模仿JsonApi的这种行为,我也很乐意使用该解决方案。

到目前为止,我的关系一直很直接。我希望能够以同样的方式获得申请人:

use Neomerx\JsonApi\Schema\SchemaProvider;

class ApplicationSchema extends SchemaProvider
{
    protected $resourceType = 'applications';

    public function getId($application) {
        return $application->id;
    }

    public function getAttributes($application) {
        return [
            .....
        ];
    }

    public function getRelationships($application, $isPrimary, array $includeRelationships) {
        return [
            'applicants' => [self::DATA => $application->applicants];
        ];
    }
}

可以使用其中一种方法完成吗?

我没有使用Laravel我只是在Slim上使用Eloquent(版本5.5)。

1 个答案:

答案 0 :(得分:0)

试试这个:

public function getApplicantsAttribute()
{
    $items = json_decode($this->attributes['applicants']);
    $instance = new Applicant();
    return $instance->newCollection(array_map(function($item) use($instance) {
        return $instance->newFromBuilder($item);
    }, $items));
}