2017-01-22 8 views
0

Я пытаюсь получить данные из многих многого relationship.I есть две таблицы:Получите от многих до многих отношений. 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'); 
} 

В vehicle_types

public function companies(){ 

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

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

$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

Переопределите второй, третий и угловой аргументы в отношении, если вы не следуете за соглашением laravel. См. Документацию https://laravel.com/docs/5.3/eloquent-relationships#many-to-many –

+0

Я не понимаю. – Anon

ответ

1

Переопределите второй, третий и угловой аргументы в отношении, если вы не следуете за соглашением laravel. Обратитесь к документации Many to Many Relation

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

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

Кроме того, Один $ 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;

+0

Он бросает ту же ошибку. – Anon

+0

Возможно, потому что $ vehicle_types возвращает коллекцию вместо объекта? – Anon

+0

@ Не знаю, да. Один автомобиль_type может иметь много компаний, поэтому вам нужно сначала зациклить '$ vehicle_types', а затем' $ vehicle_type-> компании' –