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

时间:2018-01-09 16:59:20

标签: php laravel eloquent laravel-eloquent

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

我不确定如何向此模型添加属性来表示数据库中的字段 - 或者即使我应该这样做。 Laravel文档在模型上似乎很薄,搜索引导我访问和变换器。

如果我的Campaign表中有一个名为platform_type的数据库字段,如何将campaigns模型属性链接到此字段?

澄清:

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

PlatformType是我platform_type表格中的一个字段,因为它是广告系列的一个属性 - 我在询问如何在我的模型中表示这一点。

2 个答案:

答案 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