Laravel 5.5 о модели - PullRequest
       0

Laravel 5.5 о модели

0 голосов
/ 01 марта 2020

Я хочу иметь модель главы, которая содержит столбец района, содержащий модель нескольких округов. Но я понятия не имею, как это связать. Я только что сделал с моделью и миграцией.

class Chapter extends Model
{
  /**
   * The attributes that are mass assignable.
   *
   * @var array
   */
  protected $fillable = [
      'name',
  ];

  public function districts()
  {
    return $this->hasMany(District::class);
  }
}

class District extends Model
{
  /**
   * The attributes that are mass assignable.
   *
   * @var array
   */
  protected $fillable = [
      'name',
  ];

  public function chapter()
  {
      return $this->belongsTo(Chapter::class);
  }
  
  public function blocks()
  {
    return $this->hasMany(Block::class);
  }
}

Что мне делать после этого? Нужно ли указывать район в файле миграции главы?

Вот мой файл миграции.

<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateChaptersTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('chapters', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name')->indexed();
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('chapters');
    }
}
<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateDistrictsTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('districts', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name')->indexed();
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('districts');
    }
}

Нужно ли связывать их в $ заполняемой части?

1 Ответ

0 голосов
/ 01 марта 2020

Вам необходимо связать их, используя структуру данных, чтобы Laravel Eloquent Relation смог воспользоваться этим. См. Ниже.

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

class CreateDistrictsTable extends Migration
{
public function up()
    {
        Schema::create('districts', function (Blueprint $table) {
            $table->increments('id');
            // all district related coloumns

            $table->unsignedBigInteger('chapter_id');
            $table->timestamps();

        });
    }
}

Столбец chapter_id в таблице districts действует как ограничение внешнего ключа и объединяет все районы в определенной главе c.

В классе Chapter вам нужно определить отношение, как показано ниже (что вы сделали):

public function districts()
{
        return $this->hasMany(District::class);
}

Затем вы можете получить все районы для данной главы, вызвав districts() метод. Например, чтобы получить все районы для chapter Id = 1, вы можете сделать это:

App\Chapter::find(1)->districts
...