@astaxov81

Как получить имя пользователя по id (Laravel)?

Здравствуйте.
Создал таблицы:
Пользователей (users)

public function up(): void
    {
        Schema::create('users', function (Blueprint $table) {
            $table->id();

            $table->string('first_name');
            $table->string('middle_name')->nullable();
            $table->string('last_name')->nullable();

            $table->string('nickname')->nullable();
            $table->string('avatar')->default('default.jpg');

            $table->string('email')->unique();
            $table->timestamp('email_verified_at')->nullable();

            $table->string('password');
            $table->rememberToken();

            $table->string('role', 50)->default('guest');

            $table->timestamps();
        });
    }


Постов (blog_posts)

public function up(): void
    {
        Schema::create('blog_posts', function (Blueprint $table) {
            $table->id();
            $table->unsignedBigInteger('category_id');
            $table->unsignedBigInteger('author_id');

            $table->string('title');
            $table->string('slug')->unique();

            $table->text('excerpt')->nullable();
            $table->string('thumbnail')->nullable();

            $table->text('content_raw');
            $table->text('content_html');

            $table->string('tdk_title')->nullable();
            $table->text('tdk_description')->nullable();
            $table->string('tdk_keywords')->nullable();

            $table->unsignedBigInteger('view_count')->default(0);
            $table->boolean('is_published')->default(false);
            $table->timestamp('published_at')->nullable();

            $table->timestamps();
            $table->softDeletes();

            // Foreign keys
            $table->foreign('author_id')
                ->references('id')
                ->on('users')
                ->onDelete('cascade');
            $table->foreign('category_id')
                ->references('id')
                ->on('blog_categories')
                ->onDelete('cascade');

            $table->index('is_published');
        });
    }



В таблице постов создал связь с Пользователями:
$table->foreign('author_id')
                ->references('id')
                ->on('users')
                ->onDelete('cascade');


Так как отошел от конвенции (вместо user_id использую author_id), в модели BlogPost указал отношение:
public function user(): BelongsTo
    {
        return $this->belongsTo(User::class, 'author_id', 'id');
    }


В шаблоне пытаюсь получить имя пользователя ($post->author_id->first_name), но в результате получаю
601b9b9d1d2f5099575300.png
При обращение $post->author_id - id пользователя получаю. Подскажите, где ошибся?
  • Вопрос задан
  • 120 просмотров
Решения вопроса 1
New_Horizons
@New_Horizons
Бред:
Ошибка в понимании того, как работают отношения моделей в Laravel, советую почитать документацию.

$post->user->first_name
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Kostik_1993
Fullstack Web Developer | PHP | Laravel | Vue.js
При обращение $post->author_id - id пользователя получаю. Подскажите, где ошибся?

Скорее всего в выборе профессии, а также тут
//Вместо
$post->author_id->first_name 

//Должно быть
$post->user->first_name
Ответ написан
Ваш ответ на вопрос

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

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