Как получить Car_type, метки и модель в контроллере Laravel?

#php #mysql #laravel #eloquent

#php #mysql #laravel #красноречивый

Вопрос:

Как получить результаты на основе выбранных полей. если car_type был выбран для получения автомобиля, если audi был выбран для получения только моделей для audi. Пример пользователь выбирает car_type Автомобиль, получает Отметки, пользователь выбирает Отметки Audi, получившие A1, A2. Пользователь выбирает BMW, чтобы получить X6, X5. Я подключаю все, что нужно только для получения данных из базы данных. Посмотрите мой код.

Таблица Car_type автомобиля:

     $table->increments('id');
    $table->string('name');
    $table->timestamps();
  

Таблица меток:

 $table->increments('id');
$table->string('name');
$table->timestamps();
$table->integer('car_type_id');
  

Таблица моделей:

     $table->increments('id');
    $table->integer('mark_id');
    $table->string('name');
    $table->timestamps();
    $table->integer('car_type_id');
  

Модель Car_type:

 public function marks(){
    return $this->hasMany(Mark::class);
}
  

Отметить модель:

 public function car_type(){
    return $this->belongsTo(Car_type::class);
}
public function carmodels(){
    return $this->hasMany(CarModel::class);
}
  

Модель CarModel:

 public function mark(){
    return $this->belongsTo(Mark::class);
}
  

Теперь мне нужно получить данные в контроллере. Я пытаюсь это

 $car_type = Car_type::where('id' , $id)->first();
return $car_type->marks()->get();
  

Получить метки с идентификатором модели car_type 1, но это плохая логика.

Комментарии:

1. но это плохая логика. Почему? Вы могли бы написать запрос, который выполняет все это за один раз, но в чем вопрос?

Ответ №1:

Вы можете просто взять метки car напрямую, чтобы выполнить один запрос вместо двух.

 return Mark::where('car_type_id', $id)->get();
  

Комментарии:

1. Окей, но как получить модели? И нужен ли мне id в параметре моей функции? Я немного сбит с толку. Когда я тестировал в postman, я установил baseUrl / marks / 1, почему 1, я не знаю

2. Этот вопрос действительно расплывчатый. Что вы подразумеваете под «почему 1?». Ваш маршрут определяется как /marks/{id} где id — это идентификатор метки, для которого вы хотите получить модели. При этом вы можете использовать этот параметр ID в вашем методе контроллера в качестве аргумента.

3. Окей, как я могу получить модели для выбранной метки? @metei

4. Это было бы в другой функции, такой как getModels, у которой есть идентификатор параметра ? 🙂

5. Не обязательно. Когда у вас есть Mark объект, вы можете получить доступ к его связям и получить модели напрямую. Как я только что писал вам раньше. Вы можете использовать другой метод, если этого требует ситуация..