Laravel красноречивая расширяющая модель - PullRequest
0 голосов
/ 31 августа 2018

У меня есть модель пользователя по умолчанию. Теперь у меня есть еще одна таблица для администраторов. Есть ли способ вернуть пользовательские поля (так как администратор расширяет пользователя) из модели администратора? Я нашел этот пример, но его, когда admin_id присутствует в модели пользователя. У меня здесь однозначное отношение.

class Admin extends User
{
    protected $table = 'users';

    public static function boot()
    {
        parent::boot();

        static::addGlobalScope(function ($query) {
            $query->where('is_admin', true);
        });
    }
}

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

Суть в том, что я хочу иметь возможность делать что-то вроде этого (вызывать методы у пользователей):

Admin::first()->posts()

Где метод posts находится не в классе Admin, а в классе пользователя.

Edit:

Чтобы объяснить это лучше. У меня есть две таблицы: пользователи и администраторы. Они связаны в отношениях один к одному, поэтому я могу сделать что-то вроде этого:

$admin = Admin::first();
$posts = $admin->user()->posts();

но поскольку у администратора должны быть все поля из таблицы пользователей и еще одно поле из таблицы администраторов, я ищу способ сделать это:

$admin = Admin::first();
$posts = $admin->posts();

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

1 Ответ

0 голосов
/ 31 августа 2018

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

trait UserRelationships {
    public function posts() {
         return $this->hasMany(Post::class, 'user_id');
    }
}

class Admin {
    use UserRelationships;
}

class User {
    use UserRelationships;
}

Вам просто нужно явно объявить имя внешнего ключа в отношении.

Вы также можете расширить модель User и переопределить свойство $table, но это может вызвать проблемы по разным причинам, поскольку свойства User существуют в отношении пользователя, а не в модели Admin.

...