我使用Laravel 4.2。我有以下代码:
LogMessage
型号:
class LogMessage extends Eloquent {
public function type() {
return $this->belongsTo('LogMessageType');
}
}
简单路线:
Route::get('/test', function() {
return LogMessage::take(1)->with('type')->get();
});
回复如下:
[
{
"ip": "192.168.0.100",
"ts": "2015-11-11 12:22:58",
"info": "some info",
"type": {
"id": "1",
"name": "login"
}
}
]
一切都很好,但我需要这样的回应:
[
{
"ip": "192.168.0.100",
"ts": "2015-11-11 12:22:58",
"info": "some info",
"type": "login"
}
]
我只需要加载name
模型中的LogMessageType
属性,然后将其粘贴到LogMessage
的{{1}}属性中。
我是Laravel的新手。我该怎么办?任何建议,谢谢:)
答案 0 :(得分:1)
没有内置的ORM方法。访问它的两种方法是在您想要访问它时链接它:
$logMessage->type->name
或手动构建所需的阵列响应。如果严格依据您的示例,则会出现一个奇怪的功能问题,因为您不想覆盖'类型'与标量值的关系。以下进行了调整:
Route::get('/test', function() {
$message_response = LogMessage::first();
$message_response->type_name = $message_response->type->name;
return $message_response;
});
这与第一个示例基本相同,但更接近您想要的输出。如果您正在处理Collection而不是单个Eloquent模型,那么您将需要使用get()和foreach()来构建响应Collection / array:
Route::get('/test', function() {
$message_response = new Collection; // or Array;
$messages = LogMessage::with('type')->get();
foreach ($messages as $message)
{
$message->type_name = $messages->type->name;
// you can also completely build your response array from scratch here if you wish
$message_response->add($message);
}
return $message_response;
});