2016-08-28 94 views
1

我创造我的laravel迁移,和我有这样的疑问:MySQL表关系 - 迁移LARAVEL

我有这2个表:

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。这是可能的?我如何做到这一点?

+0

你只是不想在你的'Cars'表中有'BRAND_NAME'。 –

+0

@PaulSpiegel但是,是的,我想要!不可能做到吗? – jhonleg

回答

0

如果您specting类似:

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

那么答案是否定的,除非你的品牌名称字段建立索引。

如果您在Cars桌上使用品牌ID,我认为存储名称是无用的,但我认为唯一的方法是在保存汽车模型之前查询品牌名称,是这样的:

​​

你可以把你的模型,因为它是现在和使用汽车模型hasOne关系,所以你可以得到所有品牌realted数据,以各车型。要做到这一点,你只需要在你的汽车模型类添加等的方法:

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

+0

外键不需要引用主键。但是引用的列必须被索引。并且正确的品牌()关系是'belongsTo('App \ Brand')' –

+0

你是对的。回答编辑澄清。谢谢。 –