2013-07-22 2 views
0

У меня есть две таблицы, одна называется счет-фактура, другая называется invoice_products. счет-фактура содержит основную информацию для счета-фактуры, но не итоговую. однако invoice_products содержит фактические элементы, привязанные к заказу. это позволяет мне настроить заказ, просто добавив новый invoice_product. общая сумма выполняется путем запуска функции, которая проходит через присоединенные invoice_products и добавляет их. то, что я хочу знать:Laravel 4 - получение итогового значения из соответствующей таблицы

Могу ли я использовать мутатор или какой-либо другой трюк, чтобы иметь invoice-> общий уже его заполненным без вызова функции, чтобы сделать это непосредственно

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

Я смотрел на документация для аксессуаров и мутаторов, и, похоже, это то, что я делаю, но я не могу найти примеры онлайн, которые фактически манипулируют таблицами, связанными с текущей моделью.

спасибо.

ответ

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); 
} 
+0

Это похоже на работу, за исключением того, что я не могу получить $ invoice-> total to work; только $ invoice-> total(), что прекрасно, поскольку мне не нужно его цепляться. Если мне не нужно добавить -> total() в конец поиска? во всяком случае, чтобы этого избежать? – mrt0mat0

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 объекта.