Получить от многих ко многим отношениям. Laravel

Я пытаюсь получить данные от многих к многим отношениям. У меня есть две таблицы:

companies: [cid,name,origin]

vehicle_types: [id, type]

их сводная таблица: companies_vehicle_types: companies_id,vehicle_types_id
Отношения определены:
В компаниях:

public function vehicle_types(){

return $this->belongsToMany('App\vehicle_types');
}

В типах транспортных средств

public function companies(){

return $this->belongsToMany('App\companies')->withTimestamps();
}

Я хочу найти компании, где vehicle_types = конкретный тип. Как я могу это сделать?
Я попытался сделать следующее в моем контроллере:

$vehicle_types=vehicle_types::all()->whereLoose('type','Bike');
foreach ($vehicle_types->companies as $vehicle_types) {
$company[]=$vehicle_types->pivot->name;
}
return $company;

Но это не похоже на работу. Выдает ошибку Undefined property: Illuminate\Database\Eloquent\Collection::$companies

0

Решение

Переопределите второй, третий и четвертый аргументы в отношении, если вы не следуете соглашению Ларавела. Смотри документацию Отношение многие ко многим

Второй аргумент определяет имя таблицы отношений
столик Третий аргумент — это имя внешнего ключа
модель, по которой вы определяете отношения, в то время как четвертый
Аргумент — это имя внешнего ключа модели, к которой вы присоединяетесь:

public function vehicle_types(){
return $this->belongsToMany('App\vehicle_types', 'companies_vehicle_types', 'companies_id', 'vehicle_types_id');
}

Кроме того, у One $ vehicle_type может быть много компаний, поэтому:

$vehicle_types=vehicle_types::all()->whereLoose('type','Bike');
foreach ($vehicle_types as $vehicle_type) {
foreach($vehicle_type->companies as $company)
{
$company[]=$company->pivot->name;
}
endforeach
}

Опять не вижу name поле в сводной таблице для этой строки для работы: $company[]=$company->pivot->name;

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]