Недопустимый аргумент для 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>

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

1

Решение

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

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

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

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

2

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

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

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