Laravel RESTful API解析外键

时间:2015-07-07 15:37:21

标签: php laravel eloquent

所以我在Laravel中构建一个RESTful API。到目前为止,我有一个更简单的控制器,如下所示:

class TripController extends Controller
{
  public function index()
  {
    $data = Trip::all();

    return $data;
  }
}

我得到了回复:

[
  {
  "id": 1,
  "created_at": "2015-07-06 21:01:03",
  "updated_at": "2015-07-06 21:01:03",
  "created_by": 1,
  "updated_by": 1,
  "description": "Sample Trip",
  "aircraft_id": 1
  }
]

这正是我要求的。事情是' created_by',' updated_by'和' aircraft_id'是外键。我知道我可以使用我在模型中设置的关系开始解析我的外键,例如:

$createdByName = App\Trip::first()->createdBy()->get('name');

但这需要在集合上进行一些循环,以使用外键所需的信息(基本上是名称)替换id。在使用它来返回JSON时,Laravel有一种聪明的方法吗?

1 个答案:

答案 0 :(得分:1)

如果您通过雄辩声明模型上的关系,则可以使用eager loading来提供相关模型。

Trip::with('aircraft','createdBy','updatedBy')->all();

否则,如果您只想包含名称属性之类的内容,则可以使用laravels accessor methods为Trip模型添加属性 定义这样的访问器:

public function getAircraftNameAttribute()
{
    return $this->aircraft->name;
}

通过将其添加到$ appends数组中,将其包含在模型array-或json-form中:

protected $appends = ['aircraft_name'];

请参阅here的文档。