Laravel 4 - 从相关表中获得总数

时间:2013-07-22 13:03:49

标签: php laravel laravel-4 eloquent mutators

我有两张桌子,一张叫发票,另一张叫发票_产品。 invoice包含发票的基本信息,但不包含总计。但invoice_products保存附在订单上的实际商品。这使我可以通过添加新的invoice_product来自定义订单。总计是通过运行一个循环通过附加的invoice_products并添加它们的函数来完成的。我想知道的是:

我可以使用mutator或其他一些技巧来发票 - >总计已经填充它而不直接调用函数

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

我已经查看了访问器和更改器的文档,它似乎是我正在做的但是我找不到任何实际操作与当前模型相关的表的在线示例。

感谢。

2 个答案:

答案 0 :(得分: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->总计工作,您需要指定一个__get()魔术方法:

public function __get($name)
{
    if(method_exists($this, $name) return $this->{$name}()
    return parent::__get($name);
}

答案 1 :(得分: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对象中可用。