2017-01-13 10 views
1

Я пытаюсь получить значение от одного к одному. Мои модели - это пользователи и транспортные средства. Один пользователь может иметь несколько транспортных средств, но на одном транспортном средстве может быть только один пользователь. Я получаю ошибку на мой взгляд:Недопустимый аргумент для foreach(). Laravel

Недопустимый аргумент в foreach() на мой взгляд.

Ниже приводится мой синтаксис. Может кто-нибудь мне помочь?

//users: 
class users extends Model 
{ 
    protected $fillable = ['fname','lname','address','contact','shop_name','email','username','password']; 
    public function vehicles() { 
     return $this->hasOne('App\vehicles'); 
    } 
} 

//vehicles: 
class vehicles extends Model 
{ 
    protected $fillable = ['vname','lotno','engine','mileage','kilometers','features','price','negotiable','vcondition','used','manufacture_year','description','Company_cid','Sellers_sid','Vehicle_Type_id'];  
    public function users() { 
     return $this->belongsTo('App\users'); 
    } 
} 

Контроллер

public function show($id) 
{ 
    $vehicles=vehicles::findorfail($id); 
    return view('Bike.show',compact('vehicles')); 
} 

Посмотреть, где я пытаюсь получить значение пользователя.

<tr> 
<td><b>Contact No:</b></td> 
<td>        
    @foreach($vehicles->users as $users) 
    {{$users->contact}} 
    @endforeach 
</td> 
</tr> 

Я не знаю, где я ошибся. Он показывает ошибку `Invalid аргумент, предоставленный foreach().

+0

Действительно ли «транспортные средства» успешно установлены? В вашем контроллере просто «верните $ vehicle», что вы получаете? –

+0

@ Don'tPanic Возвращает все требуемые значения. – Anon

ответ

1

foreach() требует, чтобы аргумент представлял собой набор или массив. Поскольку автомобиль принадлежит только одному пользователю, $vehicles->users не даст коллекцию. Вам не нужен цикл foreach. $vehicle->users->contact сделаю.

Примечание: Если один пользователь может иметь несколько транспортных средств, соотношение должно быть вместо этого:

return $this->hasMany('App\Vehicle'); 

отметить также соглашения об именах: имя модели, чтобы быть в единственном числе, если это hasOne отношение всегда делают соотношение сингулярный например user() нет users() и если естьMany сделать это несколько.

+0

Показывает попытку получить свойство не объекта. – Anon

+0

'дд ($ транспортных средств)', чтобы увидеть, что это дает –

+0

'транспортных средств {# 190 ▼ #fillable: массив: 15 [▶] #connection: нуль #table: нулевой #primaryKey: "Идентификатор" #keyType : "Int" #perPage: 15 + приращением: истинные + временные метки: истинные #attributes: массив: 17 [▶] #original: массив: 17 [▶] #relations: [] #hidden: [ ] #visible: [] #appends: [] #guarded: массив: 1 [▶] #dates: [] #dateFormat: нуль #casts : [] #touches: [] #observables: [] #with: [] #morphClass: нулевая + существует: истинный + wasRecentlyCreated: ложные } '' – Anon