@WQP

Как сделать связь таблицы laravel?

Добрый день, только изучаю laravel и пытаюсь построить небольшой блог. Искал как сделать связь между таблицами так и не нашел.

Имеется стандартная миграция пользователя:
Schema::create('users', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name');
            $table->string('email')->unique();
            $table->string('password');
            $table->rememberToken();
            $table->timestamps();
        });


И миграция для постов:
Schema::create('posts', function (Blueprint $table) {
            $table->increments('id');
            $table->string('slug')->unique();
            $table->string('title');
            $table->string('thumb');
            $table->text('content');
            $table->integer('author_id');
            $table->timestamps();
            $table->timestamp('published_at')->index();
        });


Как мне связать user ID с author_id?
  • Вопрос задан
  • 8101 просмотр
Решения вопроса 1
rammtw
@rammtw
Press CTRL+S to save project
$table->foreign('author_id')->references('id')->on('users');

https://laravel.com/docs/5.3/migrations#indexes
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
pxz
@pxz
✔ Совет: Вам помогли? Отметьте ответы решением.
@Result007
P|-|P
В модели User.php пропиши:

public function posts() {
    return $this->hasMany('App\Post', 'author_id');
}


А в Post.php
public function user() {
    return $this->belongsTo('App\User', 'author_id');
}
Ответ написан
Комментировать
fomvasss
@fomvasss
PHP developer
Здесь неплохо рассказано https://laravel-news.ru/blog/tutorials/eloquent-re...
В таблице постов нужно создать поле не author_id а user_id , тогда laravel автоматом будет "знать" через какое поле все это нужно вязать.
Я делал так:
- в миграции таблицы поста:
...
$table->integer('user_id')->nullable();
- в модели поста:
public function user()
    {
        return $this->belongsTo('App\Models\User', 'user_id');
    }

- в модели юзера:
public function posts()
    {
        return $this->hasMany('App\Models\Post', 'user_id');
    }

Конечно внешней ключ user_id указывать в моделях не обязательно, если у вас имена полей заданные согласно правилам laravel
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы