Я пытаюсь получить данные от многих к многим отношениям. У меня есть две таблицы:
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
Переопределите второй, третий и четвертый аргументы в отношении, если вы не следуете соглашению Ларавела. Смотри документацию Отношение многие ко многим
Второй аргумент определяет имя таблицы отношений
столик Третий аргумент — это имя внешнего ключа
модель, по которой вы определяете отношения, в то время как четвертый
Аргумент — это имя внешнего ключа модели, к которой вы присоединяетесь:
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;
Других решений пока нет …