у меня две модели
это моя модель материал:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class material extends Model
{
protected $fillable = ['proposal_id','thickness','width','length','qty','description'];
public $timestamps = false;
protected $appends = ['total'];
public function proposal()
{
return $this->belongsTo(proposal::class);
}
public function getTotalAttribute()
{
return $this->qty * $this->price;
}
}
это моя модель предложение:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class proposal extends Model
{
public function materials()
{
return $this->hasMany(material::class);
}
}
Я пытаюсь получить все предложения с резюме из общего атрибута, который является добавленным атрибутом.
Это не работает:
\App\proposal::with(['materials'=>function($q){
$q->sum('total');
}])
->get();
как это сделать правильно? Спасибо






Часть вашего кода $q->sum('total') выполняет запрос к базе данных, в то время как ваш атрибут total создается в модели, а не в базе данных.
Для быстрого решения вы можете добавить добавленный атрибут к модели Proposal, который вычисляет общее количество всех материалов. Будьте осторожны, делая это, так как вы можете столкнуться с проблемой N + 1 (https://laravel.com/docs/5.6/eloquent-relationships#eager-loading).
Следуя этому, вы могли бы проверить, было ли загружено отношение Materials, прежде чем вычислять общую сумму? Внутри вашей модели вы можете проверить через $this->relationLoaded('materials').
Наконец, что еще сложнее, вы можете написать собственный выбор, который использует MySQL (или любую другую базу данных, которую вы используете) для генерации итога во время запроса.
Надеюсь, это поможет? Дайте мне знать, если хотите продолжить обсуждение.
Спасибо чувак! ответ: мы не можем суммировать добавленные атрибуты, поэтому нам нужно создать собственный запрос, как вы сказали
это может вам помочь stackoverflow.com/questions/21679678/…