为了账号安全,请及时绑定邮箱和手机立即绑定

在 Laravel Eloquent ORM 中存储元组数组

在 Laravel Eloquent ORM 中存储元组数组

PHP
冉冉说 2023-08-11 11:03:03
我对 Laravel 相当陌生,并且对他们雄辩的模型非常感兴趣。我正在开展一个小型实践项目,需要有关如何最好地存储一些数据的建议。我想在表中存储小狗的体重和测量体重的日期(最好以元组或 json 格式)。我想稍后使用这些数据来使用 Vue 创建图表,以便创建描述随时间增长的图表和图形。最好的方法是什么?我想象在模型迁移中会有某种$table->integer('weight'), $table->timestamp('weight-measurement-date')或可能的情况$table->json('weight-data'),但我仍然是新手,不熟悉最佳实践。当然,数据库表需要存储数据而不会覆盖或删除以前的条目。任何帮助将非常感激。
查看完整描述

1 回答

?
HUWWW

TA贡献1874条经验 获得超12个赞

我将使用一个简单的one-to-many关系,因此您将有一个puppies表和一个measurements表,其中measurements表保存发生的所有不同测量。

https://img3.sycdn.imooc.com/64d5a50a00014d9d04760202.jpg

这将允许您为特定的小狗添加任意数量的测量值。


我选择measured_at代替weighed_at小狗称重的日期,因为也许您会在测量表中添加一个新列(例如身高),所以我认为使用代替是有意义的,因为您可能不measured_at这样weighed_at做想要多个测量日期。


要开始使用,您可以使用以下命令:


php artisan make:migration create_puppies_table


php artisan make:migration create_measurements_table

然后将以下内容添加到您的迁移中。


幼犬迁徙:


Schema::create('puppies', function (Blueprint $table) {

    $table->id();

    $table->timestamps();

});

测量迁移:


Schema::create('measurements', function (Blueprint $table) {

    $table->id();

    $table->foreignId('puppy_id')->constrained();

    $table->timestamp('measured_at');

    $table->timestamps();

});

然后,您将需要两个模型Puppy,并且Measurement可以在其中定义关系方法:


小狗模型:


public function measurements()

{

    return $this->hasMany('App\Measurement');

}

测量模型:


public function puppy()

{

    return $this->belongsTo('App\Puppy');

}


附:

您唯一需要考虑的是如何存储权重,可能是 a ,decimal也可能是 an integer,如果您将其存储为整数,则每次检索/存储在数据库中时都必须将其转换。


查看完整回答
反对 回复 2023-08-11
  • 1 回答
  • 0 关注
  • 57 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信