2016-08-28 2 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'); 

Вся информация она сохраняется с формой, и он работает в настоящее время. Но если я хотел бы сохранить BRAND_NAME вместо BRAND_ID в моей таблице Cars. Возможно? Как я могу это сделать?

+0

Вы просто не хотите иметь 'BRAND_NAME' в своей таблице' Cars'. –

+0

@PaulSpiegel но, да, я хочу! Невозможно сделать? – jhonleg

ответ

0

Если вы не сматривая что-то вроде:

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

Тогда ответ нет, если Ваше имя поля в бренд не индексируется.

Я не знаю, как сохранить имя, если вы используете идентификатор бренда в таблице Cars, но я думаю, что единственный способ сделать это - сделать запрос, чтобы получить фирменное наименование, прежде чем вы сохраните модель автомобиля, что-то вроде:

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

вы можете сохранить вашу модель, как это прямо сейчас и использовать отношения hasOne в модели автомобиля, так что вы можете получить все марки realted данных для каждой модели автомобиля. Для этого вам просто нужно добавить в вас модель автомобиля класса метод, как:

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

С, что вы можете получить вашу модель автомобиля со всеми связанными с ними данными бренда с чем-то вроде:

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

Проверить еще info об отношениях в https://www.laravel.com/docs/5.3/eloquent-relationships

+0

Внешнему ключу не нужно ссылаться на первичный ключ. Но ссылочные столбцы (столбцы) должны быть проиндексированы. И правильное отношение 'brand()' принадлежит 'ownTo ('App \ Brand')' –

+0

Вы правы. Ответ отредактирован для уточнения. Спасибо. –

Смежные вопросы