Я пытаюсь получить значение от одного до одного отношения. Мои модели — это пользователи и транспортные средства. Один пользователь может иметь несколько транспортных средств, но один автомобиль может иметь только одного пользователя. Я получаю ошибку на мой взгляд:
неверный аргумент в 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 ().
foreach()
требует, чтобы аргумент был коллекцией или массивом. Так как Автомобиль принадлежит только одному пользователю, $vehicles->users
не даст коллекцию. Вам действительно не нужен цикл foreach. $vehicle->users->contact
Сделаю.
Примечание. Если у одного пользователя может быть несколько транспортных средств, отношение должно быть следующим:
return $this->hasMany('App\Vehicle');
Также обратите внимание на соглашения об именах: имя модели должно быть единичным, если оно имеет отношение hasOne, всегда делайте отношение единичным, например user()
не users()
и если это имеет, многие могут сделать это множественным числом.
Других решений пока нет …