laravel 8-如何为嵌套资源路由中的作用域设置不同的关系名称

rt4zxlrg  于 2021-10-10  发布在  Java
关注(0)|答案(0)|浏览(170)

路线:

我有一个嵌套的资源路由。我用这个来声明:

Route::resource('orders.comments', \App\Http\Controllers\Backend\OrderCommentController::class)
    ->parameters([
        'comments' => 'orderComment:id'
    ])
    ->except(['show']);

模型与关系:

我有两个模型, OrderOrderComment . Order 型号:

public function comments()
{
    return $this->hasMany(OrderComment::class);
}
``` `OrderComment` 型号:

public function order()
{
return $this->belongsTo(Order::class);
}


### ordercomment控制器编辑方法签名

public function edit(Order $order, OrderComment $orderComment)


### 实际问题

每当我想要编辑订单注解时,通过访问 `/orders/1/comments/1/edit` ,我得到一个错误:

Call to undefined method App\Models\Order::orderComments()

我假设这是基于我在资源中设置的参数。但我需要的参数是 `orderComment` 而不是 `comment` ,由于 `$orderComment` 争论 `OrderCommentController@edit` . 这主要是由于名称约定。

### 我尝试/考虑过的可能排除的解决方案:

重命名 `OrderComment` 模仿 `Comment` . 这是不可能的,因为还有其他注解模型,具有不同的列,所以它也不能是多态的。
重命名 `comments` 关系 `orderComments` . 这是一个解决方案,但不是首选方案。这是因为 `$order->comments` 看起来比以前更优雅 `$order->orderComments` 等

### 结论/问题

那么,有没有可能“告诉”拉雷维尔它应该寻找一个叫做 `comments` 而不是 `orderComments` ?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题