Laravel с внешним ключом связи MySQL не отображается - PullRequest
0 голосов
/ 24 июня 2018

Я просто хочу спросить, нормально ли, что в Laravel каждый раз, когда я использую ограничение внешнего ключа, значок значка ограничения не отображается внутри MYSQL ? Также внутренний индекс не отображается.

Примечание: это просто для уточнения, если я делаю это неправильно. Пожалуйста, помогите изменить. Спасибо.

Это изображение

enter image description here

Схема:

public function up()
{
    Schema::create('subjects', function (Blueprint $table) {
        $table->increments('id');
        $table->string('subject_name');
        $table->integer('Level_id')->unsigned()->nullable();
        $table->timestamps();
    });
}

Ответы [ 2 ]

0 голосов
/ 24 июня 2018

Когда вы определяете Отношение в Laravel, например:

class Comment extends Model
{
    /**
     * Get the original post from where the comment is from.
     */
    public function post()
    {
        return $this->belongsTo('App\Post');
    }
}

Laravel не определяет ограничение отношений в вашей базе данных по умолчанию. Это не то, как Laravel обрабатывает отношения.

Чтобы указать его, вам нужно добавить ограничение при переносе, например состояния документации :

Schema::table('comments', function (Blueprint $table) {
    $table->unsignedInteger('post_id');

    // Check this part:    
    $table->foreign('post_id')->references('id')->on('posts');
});

Обновление:

Я думаю, что фактическая версия документов ( L5.6 ) удалила эту часть, но в L5.0 вы можете увидеть ее:

Проверьте эту часть:

Давайте представим, что у модели User может быть один Phone. Мы можем определите это отношение в Eloquent:

class User extends Model {

    public function phone()
    {
        return $this->hasOne('App\Phone');
    }

}

Первый аргумент, переданный методу hasOne, - это имя родственная модель. Как только отношения определены, мы можем получить их используя динамические свойства Eloquent:

$phone = User::find(1)->phone;

SQL, выполняемый этим оператором, будет следующим:

select * from users where id = 1

select * from phones where user_id = 1

Обратите внимание, что Eloquent принимает внешний ключ отношения на основе названия модели. В этом случае предполагается, что модель телефона использует внешний ключ user_id.

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

Также, проверьте этот ответ .

0 голосов
/ 24 июня 2018

Из документации:

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

Пример использования таблицы users по умолчанию и новой таблицы posts, определенной:

Schema::table('posts', function (Blueprint $table) {
    $table->unsignedInteger('user_id');

    $table->foreign('user_id')->references('id')->on('users');
});

Из этого вы можете видеть, что $table->unsignedInteger('user_id'); - это определение столбца в таблице posts,

Затем нам нужно определить отношение user_id кusers: $table->foreign('user_id')->references('id')->on('users'); определяет ре

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...