【问题标题】:How to access model method based on api auth in laravel 5.6?如何在 laravel 5.6 中访问基于 api auth 的模型方法?
【发布时间】:2018-10-31 13:43:58
【问题描述】:

我的用户汽车在用户和汽车之间具有多对多的关系。我正在使用护照,一切正常(登录、注册等)在我的用户模型中,我有如下方法

public function cars()
    { 
        return $this->belongsToMany(Car::class, 'users_cars', 'user_id', 'car_id');
    }

我也有运行良好的 API 身份验证路由

Route::group([
    'prefix' => 'auth'
], function () {
    Route::post('login', 'AuthController@login');
    Route::post('signup', 'AuthController@signup');

    Route::group([
      'middleware' => 'auth:api'
    ], function() {
        Route::get('logout', 'AuthController@logout');
        Route::get('user', 'AuthController@user');
        Route::get('car-list','CarController@carList');
    });
});

在 CarController 中,我试图根据身份验证登录 user_id 获取用户汽车,如下所示

public function carList(){
    $User = new User();
    return new CarResource($User->cars());
}

我也在为 API 使用 API 资源

use App\Http\Resources\Car as CarResource;

但它不起作用,所以有人可以指导我如何解决这个问题。不胜感激,非常感谢。

【问题讨论】:

  • 什么是 CarResource?
  • @KyleWardle 这是 API 的 API 资源
  • 我相信你应该使用return new CarResource($User->cars);return new CarResource($User->cars()->get());
  • @cbaconnier 我尝试了这两种方法,但都不适合我
  • 正如@KyleWardle 所说,根据您的代码,您的$User 不能拥有汽车。您需要获得一个已经拥有至少一个用户的用户来证明它有效。

标签: php laravel laravel-5.6


【解决方案1】:

CarController 中,您正在实例化一个新的User 对象。他们永远不会有任何汽车。如果您想获取登录用户的所有汽车,您需要执行以下操作:

public function carList(){
    $User = User::with('cars')->findOrFail(Auth::id());
    return new CarResource($User->cars);
}

【讨论】:

  • 当你说不工作时,是不是报错了?没有返回数据?
  • 它现在可以工作但返回一个空白数组datat:[]
  • 当我像这样添加静态user_id findOrFail(3); 时,它可以正常工作
  • 我找到了一种有效的方法findOrFail(request()->user()->id);,这是最佳实践吗?
猜你喜欢
  • 2020-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-21
  • 1970-01-01
  • 2018-11-26
相关资源
最近更新 更多