Ошибка при частичном дублировании?

Добрый день. Столкнулся с такой ситуацией.
Есть таблица автомобилей в которой есть id марки и id клиента и название самого автомобиля. Все сохраняет в базу отлично но при выводе этого всего добра, если 2 строки в базе имеют одинаковые id марки и клиента, при попытке получить имя марки и имя клиента.
миграция
Schema::create('cars', function (Blueprint $table) {
    $table->increments('id');
    $table->string('title');
    $table->unsignedInteger('model_id');
    $table->foreign('model_id')->references('id')->on('model')->onDelete('cascade');
    $table->unsignedInteger('user_id');
    $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
    $table->timestamps();
    });

Модель
protected $fillable = ['title',  'user_id', 'car_id'];

public function users()
{
    return $this->hasMany(User::class, 'id');
}

public function models(){
    return $this->hasMany(Model::class, 'id');
}

Controller
public function store(Request $request)
{
    $car = Car::create([
        'title'             =>  $request->title,
        'user_id'           =>  $request->user,
        'model_id'     =>  $request->publisher
    ]);

    return redirect(route('all_cars'));
}

View
@foreach($cars as $index => $car)
    <tr scope="row">
        <td>{{ $index + 1 }}</td>
        <td>{{ $car->title }}</td>
        <td>{{ $car->models->first()->title }}</td>
        <td>{{ $car->users->first()->name }}</td>
    </tr>
@endforeach

База
id | title | model_id | user_id
1 | a | 1 | 1
2 | b | 2 | 2
3 | c | 3 | 3
4 | d | 3 | 3

В итоге все имена марок и пользователя выводятся вплоть до 3 на четвертой я получаю null
  • Вопрос задан
  • 105 просмотров
Решения вопроса 1
@dk-web
навскидку мне кажется вы немного ошиблись с car_id (у вас есть в fillable) и model_id
и ключи в моделе
public function users(){
    return $this->hasMany('App\User', 'user_id','id');
}

вот так должно быть - сначала foreign key идет.
ну и с models соответственно
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы