我的laravel项目中有以下表格
users
profiles
fitness_reports
每个个人资料都属于一个用户,每个健康报告都属于一个个人资料。用户可以通过一个个人资料ID拥有一个个人资料和多个健康报告。这是为了向用户显示每周报告。
“个人档案”表具有诸如user_id,dob,年龄,身高,体重,腰围,臀部,颈部,运动水平之类的列,这些列由用户输入并正确存储在个人档案表中。效果很好。
fitness_reports表具有诸如profile_id,“ bmi”,“ bmr”,“ bai”,“ weight_status”,“ fat_us”,“ fat_bmi”,“ fat_mass”,“ lean_mass”,“ fat_category”之类的列。所有这些字段都是已计算字段,只要个人档案表中有更新,就需要自动计算。
以前,我只有一个模型,其计算字段在以下条件下可以很好地工作
public function getBmiAttribute() {
return ($this->weight / ($this->height * $this->height));
}
,然后使用控制器代码将其保存在相同的配置文件模型中
public function store(Request $request)
{
$profile = new Profile();
$profile->weight = $request->get('weight');
$profile->height = $request->get('height');
$profile->dob = $request->get('dob');
$profile->age;
$profile->bmi;
$profile->save();
return back()->with('success', 'Your profile has been updated.');
}
但是现在我们已经创建了一个单独的Fitness_reports表来跟踪每周报告。在这种情况下该如何做。
我已经尝试过了
use App\Models\Profile;
class FitnessReport extends Model
{
.....
public function getBmiAttribute($value)
{
return ($this->weight / ($this->height * $this->height));
}
}
但这不起作用。什么都得不到保存。每当用户更新个人资料中的当前信息时,如何保存其他报告。
感谢您的帮助
答案 0 :(得分:0)
您可以尝试这样的事情:
class Profile extends Model
{
// since this is really a function of the profile data
public function getBmiAttribute()
{
return ($this->weight / ($this->height * $this->height));
}
}
然后,当您存储FitnessReport:
public function store(Request $request)
{
$profile = Auth::user()->profile;
$report = new FitnessReport();
$report->bmi = $profile->bmi;
$report->save();
return back()->with('success', 'Fitness report saved.');
}
...或您需要保存报告的任何类似位置。
答案 1 :(得分:0)
您想在每次Fitness Report
更新时创建一个新的Profile
因此,您可以使用event handlers
中的Eloquent Models
。
将事件处理程序设置为Prfile Model
updated
事件,以保存新的Fitness Report
。
class Profile extends Model
{
protected static function boot()
{
parent::boot(); // TODO: Change the autogenerated stub
parent::updated(function ($profile) {
FitnessReport::create([
'profile_id' => $profile->id,
'bmi' => $profile->weight / ( $profile->height * $profile->height ),
...
... // other necessary fields
]);
});
}
// relationship to fitness reports.
public function fitnessReports()
{
return this->hasMany(FitnessReport::class);
}
}
这种情况在您创建新模型时一直存在。和bmi
将自动设置为模型并保存。
尝试使用updating event