我想用Laravel 5将JSON数据返回到我的Angular前端,但我遇到了这个问题:我有一个Alert雄辩的模型,它与AlertFrequency模型有关系:
class Alert extends Model
{
public function alertFrequency()
{
return $this->belongsTo('App'Models'AlertFrequency');
}
}
但是当我试图以JSON的形式返回警报列表时。。。
$alerts = Auth::user()->alerts->toJson();
return $alerts;
这是我得到的:
[{"id":9,"title":"fqdsgsq","place":"gdqsgq","user_id":1,"alert_frequency_id":3,"job_naming_id":3,"created_at":"2016-07-16 14:09:41","updated_at":"2016-07-16 14:09:41"}]
因此,我有"alert_frequency_id"列值,但没有实际的AlertFrequency对象
到目前为止,我发现唯一有效的解决方法是:
$alerts = Auth::user()->alerts;
foreach ($alerts as $alert) {
$alert->jobNaming = $alert->jobNaming;
$alert->alertFrequency = $alert->alertFrequency;
}
return $alerts;
这是非常丑陋的。。。
您需要手动加载关系。这被称为懒惰渴望加载关系。
$alerts = Auth::user()->alerts->load('alertFrequency')->toJson();
return $alerts;
当您执行Auth::user()->alerts->toJson()
时,您只是从Alert模型获取数据,但您想要从另一个模型(另一个表)获取数据,则需要使用load
方法进行说明。
奖金
如果你的代码在控制器方法或路由器闭包中,而不是调用toJson()
,你可以直接返回集合,Laravel会为你做这件事。示例:
public function controllerMethod() {
return Auth::user()->alerts->load('alertFrequency');
}
编码快乐!