Laravel:模型功能,根据视图中的relashioships获取总价

问题描述 投票:0回答:2

我有 :

销售表


id |名称


服务表:


id | sale_id |名字|类型|市


价格表:


id |类型|城市|价钱


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

例如:

销售(1) - >有2项服务 - >每项服务都有价格根据类型和城市的价格表 - >总价。

laravel model relationship
2个回答
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);
    }
}

您只需在销售模型上调用功能价格即可。

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

或者您可以在属性中创建它

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

并获得这样的属性

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

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

如果这有助于您,请告诉我:D


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
© www.soinside.com 2019 - 2024. All rights reserved.