Проблема с Laravel Eloquent - не работает связь - PullRequest
0 голосов
/ 25 сентября 2019

Я новичок в Laravel.У меня есть проект в Laravel 5.8.

У меня есть User модель:

class User extends Authenticatable implements MustVerifyEmail
{
    use Notifiable;
    use psCMS\Presenters\UserPresenter;
    use scopeActiveTrait;

    public static $roles = [];
    public $dates = ['last_activity'];

    // ...    

    public function scopeHistory()
    {
        return $this->hasMany('App\UserLoginHistory');
    }

    // ...
}

и UserLoginHistory:

class UserLoginHistory extends Model
{
    protected $quarded = ['id'];
    public $timestamps = false;
    protected $fillable = ['user_id', 'date_time', 'ip'];

    public function user()
    {
        return $this->belongsTo('App\User');
    }
}

Я хочу показать историю входа пользователя поэтот код:

User::history()->where('id', $idAdmin)->orderBy('id', 'desc')->paginate(25);

но он не работает.

Эта функция не работает - у меня нет результатов.

Как я могу это исправить?

Ответы [ 3 ]

1 голос
/ 25 сентября 2019

Прежде всего, вы определяете ваши отношения как область (префикс отношения с ключевым словом scope).Попробуйте обновить отношение модели к этому:

public function history()
{
    return $this->hasMany('App\UserLoginHistory');
}

Затем, учитывая ваш запрос, кажется, что вы хотите получить все записи UserLoginHistory для данного User.Это можно сделать двумя способами (как минимум).

Из самой модели UserLoginHistory, ограничив запрос значением внешнего ключа:

$userId = auth()->id(); // get the user ID here.

$results = UserLoginHistory::where('user_id', $userId)->paginate(15);
//                                  ^^^^^^^ your FK column name

Из модели Userиспользуя ваши определенные отношения:

$userId = auth()->id(); // get the user ID here.

$results = User::find($userId)->history;

Недостатком второго подхода является то, что вам нужно разбивать результаты на страницы вручную.

1 голос
/ 25 сентября 2019

в вашей пользовательской модели вы должны определить свое отношение следующим образом:

public function history()
    {
        return $this->hasMany('App\UserLoginHistory');
    }

, затем, если вы хотите выбрать модель истории, вы можете сделать это с помощью метода WhereHas () :

User::whereHas(['history'=>function($q) use ($idAdmin) {
    $q->where('id',$idAdmin)
}])->orderBy('id', 'desc')->paginate(25);
0 голосов
/ 25 сентября 2019

Вы должны сделать это изменения

public function history()
{
    return $this->hasMany('App\UserLoginHistory');
}

использование

$user = User::find($idAdmin);
$userHistories = $user->history()->latest()->paginate(25);

или получить пользователя со всей историей

User::with('history')->find($idAdmin);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...