我有:
销售表
id |名称
服务表:
id | sale_id |名称|类型城市
价格表:
id |类型城市|价格
我想使用模型上的函数直接从视图中获得销售服务的总价。
示例:
sale(1)->有2个服务->每个服务在价格表上都根据类型和城市定价->总价。
答案 0 :(得分:0)
由于价格表之间没有关系,请使用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
答案 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