我需要为datatables.net提供一维结果。
说我有这两个模型:
CustomerModel
class CustomerModel extends \sys\Model
{
public $timestamps = false;
protected $table = 'Customer';
protected $primaryKey = 'customerId';
protected $hidden = [];
protected $guarded = [ 'customerId' ];
public function paymentMethod(){
return $this->hasOne('\app\model\PaymentMethodModel' , 'paymentMethodId' , 'paymentMethodId');
}
protected $fillable =
[
'customerName', 'address'
];
}
PaymentMethodModel
class PaymentMethodModel extends \sys\Model
{
public $timestamps = false;
protected $table = 'PaymentMethod';
protected $primaryKey = 'paymentMethodId';
protected $hidden = [];
protected $guarded = [ 'paymentMethodId' ];
protected $fillable =
[
'paymentMethodName'
];
}
如果我选择使用AgentModel::with(['paymentMethod']);
之类的CustomerModel
我会得到:
{
"customerID": 1,
"customerName": "John Doe"
"address": "London"
"payment_method":
{
"paymentMethodId": 1,
"paymentMethodName" : "Cash"
}
}
我想要实现的是将paymentMethodName
作为平面对象放入结果中
像这样:
{
"customerID": 1,
"customerName": "John Doe"
"address": "London"
"paymentMethodName" : "Cash"
}
是否希望在不使用原始查询的情况下实现“ Laravel”方式?
答案 0 :(得分:1)
使用Laravel API资源是一个很好的用例,它可以将模型转换为Api响应,请在API Resources处阅读文档。
这很简单,首先要构建资源,将其称为客户资源。这会将您的模型转换为JSON响应。如果您为某些旧代码创建包装,这也很有用,那么您可以轻松地将模型转换为新结构。
use Illuminate\Http\Resources\Json\JsonResource;
class CustomerResource extends JsonResource
{
public function toArray($request)
{
return [
'customerID' => $request->customerId,
'customerName' => $request->customerName,
'address' => $request->address,
'paymentMethodName' => $request->paymentMethod->paymentMethodName,
];
}
}
然后在您的API控制器代码中,您可以像这样利用API资源。
return new CustomerResource($customerModel);
这似乎是一件很少的事情,但这是一种解决方案,当事情变得复杂时,可以为您带来很多帮助。当您处理多个模型,关系或相似模型时。如果人们感兴趣,这是首选方法,因为Fractal是一种不错的选择,因为它在Fractal Documentation API资源被使用之前是一个流行的选择。