在 Laravel 中连接数据库字段和模型属性

Connecting database fields and model attributes in Laravel

我刚开始使用 Laravel,并使用 Eloquent 来定义我的 Campaign table。我有一个 Campaign 模型,目前是空的。

我不确定如何向该模型添加属性以表示数据库中的字段 - 或者即使我应该这样做。 Laravel 文档在模型方面似乎很薄弱,搜索一直引导我找到访问器和修改器。

如果我的 campaigns table 中有一个名为 platform_type 的数据库字段,我如何 link 为该字段添加 PlatformType 模型属性?

澄清一下:

这不是关于关系的问题 - 到目前为止,我的解决方案中只有一个实体。

platform_type 是我的 campaigns table 中的一个字段,因为它是活动的一个属性 - 我想问的是如何在我的模型中表示它。

您需要定义关系。在 PlatformType 模型中:

public function campaigns()
{
    return $this->hasMany(Campaign::class, 'platform_type');
}

并且在 Campaign 模型中:

public function platformType()
{
    return $this->belongsTo(PlatformType::class, 'platform_type');
}

您还需要将 campaign table 重命名为 campaigns。或者您应该将其添加到模型中以便能够使用自定义名称:

protected $table = 'campaign';

在这一点上,这些 table 将被连接并且关系将起作用。但是,建议add foreign key constraints

该模型有一个内部数组,用于存储给定行的属性(如果您在源代码中查找它们,它称为 $attributes 并由 $original 复制)。它被复制的原因是,当您调用 save() 时,它只会在您实际从原始文件更改它们时进行保存。

您可以通过 $modelInstance->getAttribute("platform_type")$modelInstance->platform_type 访问上述属性,这将调用神奇的 __get 方法,该方法又会调用 getAttribute

所以在你的情况下你可以有:

$campaign = Campaign::find($id);
echo $campaign->platform_type;

ORM 将自动创建相关的 SQL 查询并用它找到的行的属性填充模型实例。