在 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 查询并用它找到的行的属性填充模型实例。
我刚开始使用 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 查询并用它找到的行的属性填充模型实例。