【问题标题】:Mysql Table Relations - Migrations LARAVELMysql 表关系 - 迁移 LARAVEL
【发布时间】:2017-01-04 20:54:44
【问题描述】:

我正在使用 laravel 创建我的迁移,我有这个疑问:

我有这两张桌子:

Cars: ID || || BRAND_NAME || MODEL || YEAR

Brand: ID || NAME

所以,如果我想将 Brand ID 保存在我的表 Cars 中,我会使用类似的东西:

$table->integer('brand_id')->unsigned();
$table->foreign('brand_id')->references('id')->on('brand');

它使用表单保存的所有信息现在可以使用。但是如果我想在我的Cars 表中保存BRAND_NAME 而不是BRAND_ID。这是可能的?我该怎么做?

【问题讨论】:

  • 您只是不想在Cars 表中包含BRAND_NAME
  • @PaulSpiegel 但是,是的,我想要!不可以吗?

标签: mysql laravel migration


【解决方案1】:

如果你正在观察类似的东西:

$table->string('BRAND_NAME');
$table->foreign('BRAND_NAME')->references('NAME')->on('brand');

那么答案是否定的,除非您的品牌中的名称字段被编入索引。

如果您在 Cars 表上使用品牌 ID,我认为存储名称是没有用的,但我认为这样做的唯一方法是在保存汽车型号之前进行查询以获取品牌名称,某事喜欢:

$car = new Car;
$car->brand_id = 1;
$car->brand_name = Brand::find(1)->name;
$car->save();

您可以将模型保持原样并在 Car 模型中使用 hasOne 关系,这样您就可以获得每个汽车模型的所有品牌相关数据。为此,您只需在汽车模型类中添加一个方法,例如:

public function brand()
{
 return $this->belongsTo('App\Car'); //<--- Put your car model path there
}

这样您就可以检索带有所有相关品牌数据的汽车模型,例如:

$user = User::where("id", "=", 1)->with("brand")->first();

https://www.laravel.com/docs/5.3/eloquent-relationships中查看有关关系的更多信息

【讨论】:

  • 外键不需要引用主键。但是必须对引用的列进行索引。而正确的brand() 关系是belongsTo('App\Brand')
  • 你是对的。答案已编辑以澄清。谢谢。
猜你喜欢
  • 2018-06-21
  • 2016-09-17
  • 2012-11-12
  • 2021-12-27
  • 1970-01-01
  • 1970-01-01
  • 2020-04-13
  • 2020-12-16
  • 2018-10-21
相关资源
最近更新 更多