【问题标题】:Laravel 8 - Resource Route without Database ConnectionLaravel 8 - 没有数据库连接的资源路由
【发布时间】:2021-02-17 15:04:54
【问题描述】:

我创建了三个路线:

当我打电话给/cars/1 时,一切都正确并且连接了 mysql:

    App\Models\Car {#1543 ▼
      #fillable: array:12 [▶]
      **#connection: "mysql"**
      #table: "cars"
      #primaryKey: "id"
      #keyType: "int"
      +incrementing: true
      #with: []
      #withCount: []
      #perPage: 15
      +exists: true
      +wasRecentlyCreated: false
      #attributes: array:15 [▶]
      #original: array:15 [▶]
      #changes: []
      #casts: []
      #classCastCache: []
      #dates: []
      #dateFormat: null
      #appends: []
      #dispatchesEvents: []
      #observables: []
      #relations: []
      #touches: []
      +timestamps: true
      #hidden: []
      #visible: []
      #guarded: array:1 [▶]
    }

当我调用/salaries/22 时,没有数据库连接:

    App\Models\Salarie {#358 ▼
      #fillable: array:8 [▶]
      **#connection: null**
      #table: null
      #primaryKey: "id"
      #keyType: "int"
      +incrementing: true
      #with: []
      #withCount: []
      #perPage: 15
      +exists: false
      +wasRecentlyCreated: false
      #attributes: []
      #original: []
      #changes: []
      #casts: []
      #classCastCache: []
      #dates: []
      #dateFormat: null
      #appends: []
      #dispatchesEvents: []
      #observables: []
      #relations: []
      #touches: []
      +timestamps: true
      #hidden: []
      #visible: []
      #guarded: array:1 [▶]
    }

我的模型和控制器没有区别。我已经清除了路由缓存,但我不知道为什么会以不同的方式起作用。你有什么想法吗?

【问题讨论】:

  • 您实际上可以在模型中定义连接。也许那件事发生了? > 受保护的 $connection;
  • 您的薪水表中有 id 22 吗?我认为您的模型需要是薪水而不是薪水才能工作,而无需在模型类中定义表
  • 您能向我们展示您的控制器中的 show 方法或您使用模型绑定的任何方法吗?

标签: laravel eloquent laravel-8


【解决方案1】:

“salaries”的英文单数是“salary”,而不是“salarie”。

由于您使用了 Route::resource() 方法,Laravel 正在传递一个名为 $salary 的变量。

Route::resource('/salaries', SalarieController::class)->middleware('auth');

// creates the show route
Route::get('/salaries/{salary}', ...);

因此,如果你想使用自动生成的资源路由,你必须在你的控制器中接收一个$salary 变量。我怀疑您正在尝试接收一个名为 $salarie 的变量,该变量不存在。

public function show(Salarie $salary)
{
    // ...
}

将模型重命名为Salary(加上奇异变量为$salary)和控制器重命名为SalaryController 以避免进一步混淆可能是最简单的。

【讨论】:

  • 天哪,谢谢!太愚蠢了...是否可以单独设置此行为?还是另一种语言?
  • 您可以单独定义每个路由,而不是使用::resource()。然后你可以让变量传递你想要的任何东西。对于其他语言,您可能必须通过添加自己的“不规则”定义来修改“Pluralizer”。我自己从来不需要这样做,但我想这两个词可以帮助你找到例子。
  • 好的,复数形式看起来很适合我。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-27
  • 1970-01-01
  • 2015-10-25
  • 2021-08-20
  • 2020-12-29
  • 2022-06-25
相关资源
最近更新 更多