我想用Laravel 5将JSON数据返回到我的Angular前端,但我遇到了这个问题:我有一个警告雄辩的模型与 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;
非常难看......
答案 0 :(得分:2)
您需要手动加载关系。这被称为lazy eager loading关系。
$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');
}
快乐的编码!