В Laravel у меня есть модель предложения и модель цены предложения.Цена предложения имеет «личный» столбец, который определяет, является ли цена «личной» или «деловой» ценой.То, что я хотел бы сделать, это позвонить в предложение с соотношением цен и вернуть «самую высокую личную цену», «самую низкую личную цену», «самую высокую деловую цену» и «самую низкую деловую цену».
Я думаю назвать что-то вроде:
Offer::with('Information', 'OfferPrice.highestPersonalPrice', 'OfferPrice.lowestPersonalPrice', 'OfferPrice.highestBusinessPrice', 'OfferPrice.lowestBusinessPrice')->get();
Что бы вернуть что-то вроде:
{
"id": 1,
"name": "test offer",
"description": "offer description",
"Information": {
"source": "Contact 1",
"status": "3"
},
"max_personal_price": 1345.32,
"min_personal_price": 456.43,
"max_business_price": 1245.32,
"min_business_price": 432.32
}
Вот пример текущей таблицы offer_prices:
offer_id . deposit . price . personal . status . expiry
1 300 1345.32 1 1 null
1 200 456.43 1 1 null
1 250 950.32 1 1 null
1 150 740.32 0 1 null
1 200 432.32 0 1 null
1 250 1245.32 0 1 null
Текущая модель предложения:
namespace App;
use Illuminate\Auth\Authenticatable;
use Illuminate\Database\Eloquent\SoftDeletes;
use Laravel\Lumen\Auth\Authorizable;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract;
use Illuminate\Contracts\Auth\Access\Authorizable as AuthorizableContract;
class Offer extends Model implements AuthenticatableContract, AuthorizableContract
{
use Authenticatable, Authorizable, SoftDeletes;
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'info_id','approved','expiry','branch_id'
];
/**
* The attributes excluded from the model's JSON form.
*
* @var array
*/
protected $hidden = ['deleted_at'];
public $timestamps = true;
protected $dates = [
'deleted_at'
];
public function prices()
{
return $this->hasMany('App\OfferPrice');
}
public function information()
{
return $this->belongsTo('App\Information');
}
}
Модель OfferPrice:
namespace App;
use Illuminate\Database\Eloquent\Model;
class OfferPrice extends Model {
protected $fillable = ['offer_id', 'deposit', 'price', 'personal', 'expiry', 'status'];
protected $hidden = ['status', 'offer_id', 'created_at', 'updated_at', 'deleted_at'];
protected $primaryKey = ['offer_id', 'deposit','personal'];
public $incrementing = false;
public $timestamps = true;
public function offers()
{
return $this->belongsTo('App\Offer');
}
}
Я пробовал различные способы сделать это, но пока еще ничего близко к этому не приблизилось.Надеюсь, есть гуру, который знает свое дело:)