laravel api资源添加其他数据
假设我有一个产品的API响应laravel api资源添加其他数据,laravel,laravel-5,Laravel,Laravel 5,假设我有一个产品的API响应 { data: [ { id: 3, name: "Test Product", price: "158.21", quantity: 4, income: 569.56 }, { id: 4, name: "Test Product", price: "58.21", quantity: 3
{
data: [
{
id: 3,
name: "Test Product",
price: "158.21",
quantity: 4,
income: 569.56
},
{
id: 4,
name: "Test Product",
price: "58.21",
quantity: 3,
income: 157.17
},
]
}
有没有一种方法可以像这样把一个产品的所有收入加起来
{
data: [
{
id: 3,
name: "Test Product",
price: "158.21",
quantity: 4,
income: 569.56
},
{
id: 4,
name: "Test Product",
price: "58.21",
quantity: 3,
income: 157.17
},
],
total: 726.73
}
这是我的类OrderProductResource
,它扩展了JsonResource
public function toArray($request)
{
$quantity = 0;
$overAllTotal = 0;
foreach($this->orders as $order){
$quantity += $order->pivot->quantity;
}
$sub_total = round($this->price * $quantity,2);
$discount = round((10 / 100) * $sub_total, 2);
$totalIncome = round(($sub_total - $discount), 2);
return [
'id' => $this->id,
'name' => $this->name,
'price' => $this->price,
'quantity' => $quantity,
'income' => $totalIncome,
];
}
我尝试在laravel中使用with
方法,但API响应仍然相同
这是我的控制器
public function index(){
$errorFound = false;
$error = ['error' => 'No Results Found'];
$products = Product::with('orders');
if (request()->has('q')) {
$keyword = '%'.request()->get('q').'%';
$builder = $products->where('name', 'like', $keyword);
$builder->count() ? $products = $builder : $errorFound = true;
}
return $errorFound === false ? OrderProductResourceCollection::collection($products->latest()->paginate()) : $error;
}
试试这个:
public function toArray($request)
{
$quantity = 0;
$overAllTotal = 0;
foreach($this->orders as $order){
$quantity += $order->pivot->quantity;
}
$sub_total = round($this->price * $quantity,2);
$discount = round((10 / 100) * $sub_total, 2);
$totalIncome = round(($sub_total - $discount), 2);
return [
'id' => $this->id,
'name' => $this->name,
'price' => $this->price,
'quantity' => $quantity,
'income' => $totalIncome,
//your relation
'realtion_name' => $this->relation_name
];
}
试试这个:
public function toArray($request)
{
$quantity = 0;
$overAllTotal = 0;
foreach($this->orders as $order){
$quantity += $order->pivot->quantity;
}
$sub_total = round($this->price * $quantity,2);
$discount = round((10 / 100) * $sub_total, 2);
$totalIncome = round(($sub_total - $discount), 2);
return [
'id' => $this->id,
'name' => $this->name,
'price' => $this->price,
'quantity' => $quantity,
'income' => $totalIncome,
//your relation
'realtion_name' => $this->relation_name
];
}
您需要为产品模型中的合计数量
和收入
定义2
public function getQuantityAttribute()
{
$quantity = 0;
foreach($this->orders as $order){
$quantity += $order->pivot->quantity;
}
return $quantity;
}
public function getIncomeAttribute()
{
$sub_total = $this->price * $this->quantity;
$discount = round((10 / 100) * $sub_total, 2);
return round(($sub_total - $discount), 2);
}
像这样更改OrderProductResource
类
public function toArray($request)
{
return [
'id' => $this->id,
'name' => $this->name,
'price' => $this->price,
'quantity' => $this->quantity,
'income' => $this->income,
];
}
namespace App\Http\Resources;
use Illuminate\Http\Resources\Json\ResourceCollection;
class OrderProductResourceCollection extends ResourceCollection
{
public function toArray($request)
{
return [
'data' => $this->collection,
'total' => $this->collection->sum('income')
];
}
}
$products = Product::with('orders')->get();
return response()->json(new OrderProductResourceCollection($products));
像这样为OrderProductResource
创建一个资源集合类OrderProductResourceCollection
public function toArray($request)
{
return [
'id' => $this->id,
'name' => $this->name,
'price' => $this->price,
'quantity' => $this->quantity,
'income' => $this->income,
];
}
namespace App\Http\Resources;
use Illuminate\Http\Resources\Json\ResourceCollection;
class OrderProductResourceCollection extends ResourceCollection
{
public function toArray($request)
{
return [
'data' => $this->collection,
'total' => $this->collection->sum('income')
];
}
}
$products = Product::with('orders')->get();
return response()->json(new OrderProductResourceCollection($products));
现在在控制器中,像这样使用它
public function toArray($request)
{
return [
'id' => $this->id,
'name' => $this->name,
'price' => $this->price,
'quantity' => $this->quantity,
'income' => $this->income,
];
}
namespace App\Http\Resources;
use Illuminate\Http\Resources\Json\ResourceCollection;
class OrderProductResourceCollection extends ResourceCollection
{
public function toArray($request)
{
return [
'data' => $this->collection,
'total' => $this->collection->sum('income')
];
}
}
$products = Product::with('orders')->get();
return response()->json(new OrderProductResourceCollection($products));
您可以在此处查看资源收集文档您需要为产品模型中的合计数量
和收入
定义2
public function getQuantityAttribute()
{
$quantity = 0;
foreach($this->orders as $order){
$quantity += $order->pivot->quantity;
}
return $quantity;
}
public function getIncomeAttribute()
{
$sub_total = $this->price * $this->quantity;
$discount = round((10 / 100) * $sub_total, 2);
return round(($sub_total - $discount), 2);
}
像这样更改OrderProductResource
类
public function toArray($request)
{
return [
'id' => $this->id,
'name' => $this->name,
'price' => $this->price,
'quantity' => $this->quantity,
'income' => $this->income,
];
}
namespace App\Http\Resources;
use Illuminate\Http\Resources\Json\ResourceCollection;
class OrderProductResourceCollection extends ResourceCollection
{
public function toArray($request)
{
return [
'data' => $this->collection,
'total' => $this->collection->sum('income')
];
}
}
$products = Product::with('orders')->get();
return response()->json(new OrderProductResourceCollection($products));
像这样为OrderProductResource
创建一个资源集合类OrderProductResourceCollection
public function toArray($request)
{
return [
'id' => $this->id,
'name' => $this->name,
'price' => $this->price,
'quantity' => $this->quantity,
'income' => $this->income,
];
}
namespace App\Http\Resources;
use Illuminate\Http\Resources\Json\ResourceCollection;
class OrderProductResourceCollection extends ResourceCollection
{
public function toArray($request)
{
return [
'data' => $this->collection,
'total' => $this->collection->sum('income')
];
}
}
$products = Product::with('orders')->get();
return response()->json(new OrderProductResourceCollection($products));
现在在控制器中,像这样使用它
public function toArray($request)
{
return [
'id' => $this->id,
'name' => $this->name,
'price' => $this->price,
'quantity' => $this->quantity,
'income' => $this->income,
];
}
namespace App\Http\Resources;
use Illuminate\Http\Resources\Json\ResourceCollection;
class OrderProductResourceCollection extends ResourceCollection
{
public function toArray($request)
{
return [
'data' => $this->collection,
'total' => $this->collection->sum('income')
];
}
}
$products = Product::with('orders')->get();
return response()->json(new OrderProductResourceCollection($products));
您可以在此处检查资源集合的文档当我这样放置它时,它将重复当我这样放置它时,它将重复\Database\Query\Builder::mapInto不存在。return$errorFound==false?response()->json(OrderProductResourceCollection::collection($products->latest()->paginate()):$error;但是,当我在扩展JsonResource的典型资源类上尝试它时,它仍然可以正常工作。方法illumb\Database\Query\Builder::mapInto不存在。return$errorFound==false?response()->json(OrderProductResourceCollection::collection($products->latest()->paginate()):$error;但是,当我在一个扩展JsonResource的典型资源类上尝试它时,它仍然很好地工作,仍然和sirLet us一样。您使用的是哪种转换器?分形?你用的是哪种变压器?分形?