0

我有两张表,一张称为 invoice,另一张称为 invoice_products。invoice 包含发票的基本信息,但没有总数。但是 invoice_products 包含附加到订单的实际项目。这使我可以通过添加新的 invoice_product 来自定义订单。总数是通过运行一个函数来完成的,该函数循环遍历附加的 invoice_products 并将它们相加。我想知道的是:

我可以使用 mutator 或其他技巧来填充 invoice->total 而不直接调用函数吗

$invoice = Invoice::find(1);
echo $invoice->total;

我查看了访问器和修改器的文档,这似乎是我正在做的事情,但我在网上找不到任何实际操作与当前模型相关的表的示例。

谢谢。

4

2 回答 2

0

只需total()向您的模型添加一个新功能:

public function total()
{
    // You can access the model using $this
    // example: $this->id
    // ...
    // Your logic to get the count
    // ...

    $this->total = $theGeneratedCount;
    return $this;
}

$invoice = find(1)->total(); // returns a Invoice model
echo $invoice->total;

这样你就可以继续链接。否则,您可以只返回计数,但您将无法链接。

...
return $theGeneratedCount;
...

$invoice = find(1);
echo $invoice->total(); // returns the count

要使 $invoice->total 起作用,您需要指定一个 __get() 魔术方法:

public function __get($name)
{
    if(method_exists($this, $name) return $this->{$name}()
    return parent::__get($name);
}
于 2013-07-22T13:18:49.073 回答
0

如果你想使用访问器,Invoice你可以在你的模型中定义一个方法

public function getTotalAttribute()
{
  // You can access the related model e.g if your invoice is related to a product model          
  //you can access the products collection by the relationship name

  $this->products->...

  // calculate the total ... 

   return $total;
}

然后您可以根据需要调用该方法$invoice->total,该属性将在$invoice对象中可用。

于 2013-07-22T14:07:43.133 回答