Laravel:建立模型功能,根据视图中的折价获得总价

时间:2019-04-14 09:49:31

标签: laravel model relationship

我有:

销售表


id |名称


服务表:


id | sale_id |名称|类型城市


价格表:


id |类型城市|价格


我想使用模型上的函数直接从视图中获得销售服务的总价。

示例:

sale(1)->有2个服务->每个服务在价格表上都根据类型和城市定价->总价。

2 个答案:

答案 0 :(得分:0)

由于价格表之间没有关系,请使用citytypeprice表中进行搜索。

假设您有一个$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

答案 1 :(得分:0)

我的解决方案有点不同

模型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);
    }
}

您只需在Sale模型中调用功能价格即可。

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

或者您可以在属性中添加它

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

并像这样获得该属性

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

但是我要做的是将类型和城市移动到Price,并且在Service中只有price_id

让我知道这是否对您有帮助:D