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