如何将带参数的 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-&gt;id 而不是$id['product_id', $id] => ['product_id', $this-&gt;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 方法?

Laravel单一作业类被分派了多次,不同的参数被覆盖了

如何调用参数来自 Ruby 模型的 javascript 函数?

如何将参数绑定到模型上使用的 Laravel 中的原始数据库查询?

Laravel - 如何调用模型类助手然后在视图中显示结果