2014-10-21 7 views
2

Я учусь Laravel и я следующие вопросы:Laravel 4 - понимание модели и таблицы базы данных отношений

  1. ли это необходимо иметь точное соответствие таблиц базы данных с моделями? Например: могу ли я иметь этот сценарий: в DB: table1, table2, table3, но в модели laravel у меня есть groupOfTables.php, где groupOfTables представляют все 3 таблицы в базе данных.

  2. Все 3 таблицы в моей базе данных связаны. Какой запрос я могу использовать для groupOfTables для извлечения записей из всех трех таблиц?

Спасибо!

ответ

2

Я бы не рекомендовал иметь модель, связанную с несколькими таблицами. Это недоразумение в использовании Eloquent ORM.

Если таблицы в вашей базе данных взаимосвязаны, то отношения могут быть описаны в методах модели. Ниже приведен пример использования трех моделей. Автомобиль, изготовитель и запасные части.

Столы

  • автомобили
  • производители
  • части

Модели

  • автомобилей
  • Производитель
  • Часть

Вот пример вашей Car модели. У автомобиля только один производитель, но много частей. Мы рассказываем Ларавелю об этом с помощью этих методов.

class Car extends Eloquent { 

    public function manufacturer() { 
    $this->belongsTo('Manufacturer'); 
    } 

    public function parts() { 
    $this->hasMany('Part'); 
    } 

} 

Чтобы запросить все те части, которые принадлежат к машине мы могли бы сделать это:

Car::find(1)->parts(); 

Это находит Car с id из 1 и возвращения всех частей, которые принадлежат к нему. Запрос сиквел будет делать что-то похожее на это:

select * from car where id = 1 
select * from parts where user_id = 1 

Вот пример производителя и частей в настоящее время. В логике ниже мы говорим: «Часть принадлежит только одному автомобилю, в то время как у производителя много автомобилей».

class Part extends Eloquent { 

    public function car() 
    { 
    $this->belongsTo('Car'); 
    } 

} 

class Manufacturer extends Eloquent { 

    public function cars() 
    { 
    $this->hadMany('Car'); 
    } 

} 

Теперь мы можем использовать это так:

Manufacture::find(1)->cars(); // what cars does a manufacturer with an id of 1 own 
Part::find(3)->car(); // what car owns the part with an id of 3 

Я знаю, что это не прямо ответить на ваш вопрос, но надеюсь, что это проясняет, как использовать модель отношений должным образом.

+0

Спасибо Росс за подробное объяснение .. –

+0

Спасибо Росс Эдман за подробное объяснение! У меня есть еще один вопрос, связанный с $ fillable в моей модели: позволяет сказать, что у меня есть $ fillable = {car_id, имя_производителя, имя_компьютера), где car_id находится в таблице автомобилей, имя производителя в изготовителе и имя_компьютера в таблице деталей. поэтому когда я это делаю: Car :: find (1) -> parts(); будут заполнены и другие поля (из таблицы изготовителя и частей) $ fillable? –

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