Как отправить параметры в Laravel? - PullRequest
0 голосов
/ 09 мая 2019

У меня есть доктора и таблица doctor_country_city.

Schema::create('doctors', function (Blueprint $table) {
        $table->increments('id');
        $table->integer('doctor_no')->unique();
        $table->string('slug')->unique();
        $table->string('fullname')->unique();
        $table->string('profile_image')->nullable();
        $table->date('birthday')->nullable();
        $table->enum('gender', ['male', 'female'])->nullable();
        $table->string('phone');
        $table->string('email');
        $table->string('password');
        $table->string('website_url')->nullable();
        $table->smallInteger('starting_month')->unsigned()->nullable();
        $table->year('starting_year')->nullable();
        $table->rememberToken();
        $table->timestamps();
        $table->dateTime('sort_date');
        $table->softDeletes();
    });


Schema::create('doctor_country_city', function (Blueprint $table) {
        $table->increments('id');
        $table->unsignedInteger('doctor_id');
        $table->unsignedInteger('country_id');
        $table->unsignedInteger('city_id');
        $table->timestamps();
        $table->foreign('doctor_id')->references('id')->on('doctors');
        $table->foreign('country_id')->references('country_id')->on('cities');
        $table->foreign('city_id')->references('id')->on('cities');
    });

Я хочу отправить несколько параметров в маршрут.Какими должны быть отношения между файлом и моделью контроллера?

Example: Route::get('{country?}/{city?}/{slug?}', 'DoctorsController@showDoctor');

1 Ответ

1 голос
/ 09 мая 2019

Прежде чем дать вам решение, я бы посоветовал вам переосмыслить дизайн вашей базы данных.

Может ли доктор принадлежать многим городам?Если нет, то вам не нужна сводная таблица doctor_country_city.Также не стоит связывать доктора с городом и страной.Это довольно странно, потому что ваша база данных потенциально позволяет назначить доктора в Нью-Йорк, Франция.Город по определению принадлежит только одной стране.

Так что я бы предпочел отнести врача к городу, который относится к стране.

Dr. John Doe > New York > USA

Этоимеет больше смысла для меня.Таким образом, у вас будет еще одна таблица с именем countries, и их модели будут иметь такие отношения:

class Doctor extends Model {
   public function city() {
      return $this->belongsTo(City::class);
   }
}

class City extends Model {
   public function country() {
      return $this->belongsTo(Country::class);
   }
   public function doctors() {
      return $this->hasMany(Doctor::class);
   }
}

class Country extends Model {
   public function cities() {
      return $this->hasMany(City::class);
   }
}

В одной стране может быть много городов, но один город принадлежит одной стране.В одном городе может быть много врачей, но врач принадлежит только одному городу.

Для получения дополнительной информации о красноречивых отношениях см. Документацию .

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

Вы можете использовать scope , используя whereHas Eloquent.Этот метод позволяет фильтровать результаты вашей модели Доктора по значению в связанной таблице.

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

...