Pat*_*oft 5 php mysql join laravel
我想在我的Auth :: user()查询中添加一些连接.如何在不创建全新查询的情况下执行此操作?我只是希望能够使Auth :: user()的默认调用与以下内容不同:
SELECT * FROM `users` WHERE `id` = ?Run Code Online (Sandbox Code Playgroud)
至
SELECT * FROM users INNER JOIN user_icons ON user_icons.ID = users.iconid WHERE `id` = ? Run Code Online (Sandbox Code Playgroud)
我正在使用默认模型User类.
Laravel 为您提供了一种扩展Auth功能的方法。首先,您需要创建一个实现Illuminate\Auth\UserProviderInterface. 一旦你有了你的课程,你就打电话Auth::extend()来配置Auth你的新课程。
对于您的情况,您要做的最简单的事情是创建一个扩展Illuminate\Auth\EloquentUserProvider. 您需要更新retrieveBy*要添加到自定义联接中的方法。例如:
class MyEloquentUserProvider extends Illuminate\Auth\EloquentUserProvider {
public function retrieveById($identifier) {
return $this->createModel()->newQuery()->join(/*join params here*/)->find($identifier);
}
public function retrieveByToken($identifier, $token) {
// your code with join added here
}
public function retrieveByCredentials(array $credentials)
// your code with join added here
}
}
Run Code Online (Sandbox Code Playgroud)
一旦你的类充实了,你需要告诉 Auth 使用它:
Auth::extend('eloquent', function($app) {
return new MyEloquentUserProvider($app['hash'], $app['config']['auth.model']);
});
Run Code Online (Sandbox Code Playgroud)
该Auth::extend方法的第一个参数是正在使用的身份验证驱动程序的名称,如app/config/auth.php. 如果需要,您可以创建一个新驱动程序(例如“myeloquent”),但您需要更新您的Auth::extend语句和app/config/auth.php驱动程序。
完成所有这些后,Auth::user()将最终调用您的MyEloquentUserProvider::retrieveById方法。
公平警告:我自己实际上并没有这样做,而且这些都没有经过个人测试。您可能想要查看文档(L4.1 文档、L4.2 文档)并查看 Laravel 代码。
其他注意事项:
Auth::user()则不会再返回记录,并且用户可能根本无法登录。| 归档时间: |
|
| 查看次数: |
2778 次 |
| 最近记录: |