Скажут, у меня есть три модели:Laravel 5,1 отношений отношений
- Worker
- Департамента
- Компания
Компания имеет много департаментов и Департамент имеет много Рабочие. Теперь, как я могу получить всех Рабочих от компании?
я могу получить все отделы с
Company::find(1)->departments()
я могу получить все рабочие с
Department::find(1)->workers()
Я попытался создать метод модели компании так:
public function workers()
{
return $this->departments->map(function($item, $key){
return $item->workers;
});
}
Проблема поднялась, когда я хотел назвать метод 'where()'
в коллекции с тремя аргументы, и это дало мне пустую коллекцию.
Company::find(1)->workers()->where('salary', '>=', '100');
И это возвращает пустую коллекцию, что бы я ни делал. Я попробовал whereLoose, передал '100' как целое число. Следующие работает отлично:
Company::find(1)->workers()->where('salary', '100');
дает мне все рабочие, которые имеют зарплату в 100
Есть ли способ рода использовать Отношения, так что я могу получить от отношения Company->hasMany('Worker')
?
Это именно то, что я искал. Но есть ли способ пройти через 2 промежуточных модели? Предположим, у меня есть отношения Worker-> hasMany ('Worksheet') и я ищу Company-> worksheets(). –
Я не уверен, что это можно сделать без необработанного SQL-запроса с объединениями. Или мы можем получить источник hasManyThrough и сделать наш собственный метод и назвать его hasManyThrough2Models. Подожди немного, я постараюсь это сделать. Я скоро отправлю отзыв. – num8er
@MihkelAllorg, я обновил свой ответ, надеюсь, что это поможет. Предупреждение: не проверено, но вы можете попробовать – num8er