проблема с отношениями laravel - PullRequest
0 голосов
/ 04 ноября 2019

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

Примечание: Эта тема не решает мою проблему

Схема таблицы категорий


Schema::create('categories', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->string('name')->unique();
            $table->string('slug')->unique();
            $table->string('banner')->nullable();
            $table->boolean('status')->default(false);
            $table->bigInteger('creator');
            $table->bigInteger('moderator');
            $table->timestamps();
        });

схема таблицы пользователя

Schema::create('users', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->string('name');
            $table->string('email')->unique();
            $table->timestamp('email_verified_at')->nullable();
            $table->string('password');
            $table->rememberToken();
            $table->timestamps();
        });

Категория Модель:


   public function creator(){
        return $this->hasOne(User::class, 'id',  'creator')->select('id', 'name');
    }

Код контроллера категории:


$records = Category::with(['creator'])->paginate(env('REC_LIMIT'));

данные, которые я получаю:


"data":[{"id":1,"name":"Uncategorized","slug":"uncategorized","banner":null,"status":1,"creator":{"id":1,"name":"demon slayer"},"moderator":1,"created_at":"2019-11-03 12:08:33","updated_at":"2019-11-04 11:11:01"},

обратите внимание, что если в запросе удалено предложение with, я получу:


"data":[{"id":1,"name":"Uncategorized","slug":"uncategorized","banner":null,"status":1,"creator":1,"moderator":1,"created_at":"2019-11-03 12:08:33","updated_at":"2019-11-04 11:11:01"},

в блейд-файле, и я делаю ниже код для печати имени пользователя создателя вместо его идентификатора записи.


$record->creator->name 
//or
$record->creator[0]->name

В настоящее время я получаю это:

Facade\Ignition\Exceptions\ViewException
Trying to get property 'name' of non-object (View: /Users/dragonar/Dev/pdp/resources/views/backend/category/index.blade.php) 

Ответы [ 2 ]

1 голос
/ 04 ноября 2019

Вы пробовали вместо

public function creator(){
    return $this->hasOne(User::class, 'id',  'creator')->select('id', 'name');
}

Это:

public function creator(){
    return $this->hasOne(User::class, 'user_id')->select('id', 'name');
}

Или изменить имя функции с creator() на user().

А затем в вашем клинке $record->user->name.

Это то, что я нашел в документах по Laravel:

Eloquent определяет внешний ключ отношения на основе названия модели. В этом случае предполагается, что модель телефона автоматически имеет внешний ключ user_id. Если вы хотите переопределить это соглашение, вы можете передать второй аргумент методу hasOne: return $ this-> hasOne ('App \ Phone', 'foreign_key'); Источник

0 голосов
/ 05 ноября 2019

В итоге я переименовал создателя в creator_id, а в модели функция - создатель. вот так теперь я могу получить доступ к нужным данным $ record-> creator-> name или $ record-> creator-> id.

, что я хотел, вместо того, чтобы создатель возвращал мне идентификатор из исходного кода, я мог бы бытьв состоянии сделать $ record-> creator-> name или $ record-> creator-> id напрямую.

...