如何将带参数的 Laravel 模型函数调用到 Vuejs 模板中?
Posted
技术标签:
【中文标题】如何将带参数的 Laravel 模型函数调用到 Vuejs 模板中?【英文标题】:How to call Laravel Model function with parameter into Vuejs template? 【发布时间】:2021-06-20 17:50:41 【问题描述】:我有一个产品表和库存表。存储有关产品销售和购买的库存表数据。我需要根据购买和销售显示每个产品的库存。所以我需要在 vuejs 模板中调用一个带有产品 ID 的模型函数来计算产品的库存数量。如何做到这一点,或者有没有其他方法?请帮帮我。
我的产品控制器功能是-
public function stock()
return Product::with(['category', 'stock'])->get();
我的产品模型功能是-
public function stock($id)
$purchase_quantity = Stock::where([['product_id', $id], ['stock_type', 'purchase']])->sum('quantity');
$sale_quantity = Stock::where([['product_id', $id], ['stock_type', 'sale']])->sum('quantity');
return $purchase_quantity - $sale_quantity;
我的 vuejs 模板代码在每次 v-for 迭代中我想调用模型函数-
<tr v-for="product in products.data" :key="product.id">
<td> product.id </td>
<td> product.category.name </td>
<td> product.name </td>
<td> product.unit </td>
<td> product.stock(product.id) </td>
</tr>
这里 product.stock(product.id) 不起作用。 它显示了错误- 函数 App\Models\Product::stock() 的参数太少,通过了 0
【问题讨论】:
从您的方法定义stock($id)
中删除id
参数,然后在您的方法中使用$this->id
而不是$id
。 ['product_id', $id]
=> ['product_id', $this->id]
【参考方案1】:
在这种情况下你需要使用accessor
所以
在Product.php
protected $appends = ['stocks'];
/**
* Get the Product's stock
*
* @return int
*/
public function getStocksAttribute()
$purchase_quantity = Stock::where([['product_id', $this->id], ['stock_type', 'purchase']])->sum('quantity');
$sale_quantity = Stock::where([['product_id', $this->id], ['stock_type', 'sale']])->sum('quantity');
return $purchase_quantity - $sale_quantity;
然后在 javascript 中,您可以在每个产品行中获取库存,例如 product.stocks
你的 vuejs 代码会是这样的
<tr v-for="product in products.data" :key="product.id">
<td> product.id </td>
<td> product.category.name </td>
<td> product.name </td>
<td> product.unit </td>
<td> product.stocks </td>
</tr>
参考链接https://laravel.com/docs/8.x/eloquent-mutators#defining-an-accessor
【讨论】:
我按照您的指示在控制器功能中更改了 Product::with(['category', 'stock'])->get() => Product::with('category')- >获取()。它正在工作。非常感谢。以上是关于如何将带参数的 Laravel 模型函数调用到 Vuejs 模板中?的主要内容,如果未能解决你的问题,请参考以下文章
Laravel 5使用刀片模板在视图中调用函数时如何使用参数
如何在 laravel 5 中模拟模型上的 create 方法?
如何调用参数来自 Ruby 模型的 javascript 函数?