我刚开始使用Laravel,并使用Eloquent来定义我的train_on_batch()
表。我有一个Campaign
模型,目前是空的。
我不确定如何向此模型添加属性来表示数据库中的字段 - 或者即使我应该这样做。 Laravel文档在模型上似乎很薄,搜索引导我访问和变换器。
如果我的Campaign
表中有一个名为platform_type
的数据库字段,如何将campaigns
模型属性链接到此字段?
澄清:
这不是关系的问题 - 到目前为止我的解决方案中只有一个实体。
PlatformType
是我platform_type
表格中的一个字段,因为它是广告系列的一个属性 - 我在询问如何在我的模型中表示这一点。
答案 0 :(得分:1)
该模型有一个内部数组,用于存储给定行的属性(如果您在源代码中查找它们,则称为$attributes
并由$original
复制)。它被复制的原因是当你打电话给save()
时,如果你真的从原件改变它们,它只会进行保存。
您可以通过$modelInstance->getAttribute("platform_type")
或$modelInstance->platform_type
访问所述属性,这些属性会调用魔术__get
方法,后者又会调用getAttribute
所以在你的情况下,你可以:
$campaign = Campaign::find($id);
echo $campaign->platform_type;
ORM将自动创建相关的SQL查询,并使用它找到的行的属性填充模型实例。
答案 1 :(得分:0)
您需要定义关系。在PlatformType
模型中:
public function campaigns()
{
return $this->hasMany(Campaign::class, 'platform_type');
}
在Campaign
模型中:
public function platformType()
{
return $this->belongsTo(PlatformType::class, 'platform_type');
}
您还需要将campaign
表重命名为campaigns
。或者您应该将其添加到模型中以便能够使用自定义名称:
protected $table = 'campaign';
此时,这些表将被连接,关系将起作用。但是,建议add foreign key constraints。