我有 :
销售表
id |名称
服务表:
id | sale_id |名字|类型|市
价格表:
id |类型|城市|价钱
我希望使用模型上的函数直接从视图中获取销售服务的总价。
例如:
销售(1) - >有2项服务 - >每项服务都有价格根据类型和城市的价格表 - >总价。
我的解决方案有点不同
模型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
由于价格表之间没有关系,请使用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