Laravel: функция модели, чтобы получить общую стоимость на основе relashioships из вида - PullRequest
0 голосов
/ 14 апреля 2019

у меня есть:

Таблица продаж


id |имя


Таблица услуг:


id |sale_id |имя |тип |город


Таблица цен:


id |тип |город |цена


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

пример:

продажа (1)-> имеет 2 услуги -> каждая услуга имеет цену в таблице цен в зависимости от типа и города -> общая стоимость.

Ответы [ 2 ]

0 голосов
/ 14 апреля 2019

Мое решение немного отличается

Модель Sale.php

<?php
namespace App;

use Illuminate\Database\Eloquent\Model;

class Sale extends Model
{
    function services() {
        return $this->hasMany(Service::class);
    }
    function price() {
        return $this->services->sum('price.price');
    }
}

Модель Service.php

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Service extends Model
{
    function sale() {
        return $this->belongsTo(Sale::class);
    }
    function price() {
        return $this->hasOne(Price::class, 'type', 'type')
            ->where('prices.city', $this->city);
    }
}

И вы просто вызываете функцию наВаша модель продажи.

\App\Sale::find(3)->price()

Или вы можете сделать это в атрибуте

function getPriceAttribute() {
    return $this->services->sum('price.price');
}

и просто получить этот атрибут вот так

\App\Sale::find(3)->price

Но то, что я хотел бы сделать, это переместить типи город к Price и имеют только price_id в Service

Дайте мне знать, если это вам поможет: D

0 голосов
/ 14 апреля 2019

Поскольку между таблицей цен нет никакой связи, используйте city и type для поиска по таблице price.

Предположим, что у вас есть объект $sale.


// all the prices which is for particular types and cities got from $sale
$prices = Price::where(function($query) use ($sale) {
    $query->whereIn('type', $sale->services()->pluck('type')->toArray())
        ->whereIn('city', $sale->services()->pluck('city')->toArray());
});

$totalPrice = $prices->sum->price
...