在一个json响应中获取所有相关字段

时间:2015-02-12 14:28:21

标签: laravel laravel-4

我想用laravel制作一个api,我希望得到以下格式的所有字段

projects: [
   {
    id,
    name,
    logo,
    thumbnail,
    phases: [{
        id,
        name,
        date,
        views: [{
        id,
        name,
        thumbnail,
        images: [{
            id,
            path: [ 5 urls for the various images ]
            date
        }]
    }]
    }]
   }
   ]

我的数据库模型如下 - 项目 - >很多阶段 - 阶段 - >有很多看法 - 观点 - > hasmany图像

模型如下

class Project extends \Eloquent {

// Add your validation rules here
public static $rules = [
    'title' => 'required',
];

// Don't forget to fill this array
protected $fillable = [ 'title', 'desc' ];

public function phases() {
    return $this->hasMany('Phase');
}

}


class Phase extends \Eloquent {
protected $fillable = [ 'title', 'from', 'to', 'project_id' ];

public static $rules = [
    'title' => 'required',
    'from'  => 'required',
    'to'    => 'required'
];

public function views() {
    return $this->hasMany( 'View' );
}

public function project(){
    return $this->belongsTo('Project');
}
}

class View extends \Eloquent {

// Add your validation rules here
public static $rules = [
    'title'      => 'required',
    'image_path' => 'required'
];

// Don't forget to fill this array
protected $fillable = [ 'title', 'image_path', 'caption', 'view_date', 'phase_id' ];

public function phase(){
    return $this->belongsTo('Phase');
}

}

如何在索引响应中获取所有json,我使用以下内容但没有获得相同的格式

Project::all();

2 个答案:

答案 0 :(得分:0)

您必须eager load数据集:

Project::with('phases.views','phases.images')->get();

您似乎没有将模型中的图像作为相关模型,但您确实有项目。但你的json示例显示图像而不是项目,这是对的吗?

答案 1 :(得分:0)

在检索集合时,默认情况下不会加载关系(这称为延迟加载)。但您可以使用with()方法加载它们(这称为急切加载):

Project:all()->with('phases')->get();

您还可以使用点表示法链接嵌套关系:

Project:all()->with('phases.views')->get();