在 Route 声明上使用 withTrashed 方法并在 Model 中使用 resolveRouteBinding 时的自定义模型绑定
Posted
技术标签:
【中文标题】在 Route 声明上使用 withTrashed 方法并在 Model 中使用 resolveRouteBinding 时的自定义模型绑定【英文标题】:Custom model binding when using withTrashed method on Route declaration and resolveRouteBinding in Model 【发布时间】:2022-01-09 17:12:42 【问题描述】:我在软删除模型的路由上遇到隐式模型绑定问题。当使用withTrashed
方法时,Model 中的resolveRouteBinding
方法不会被调用。当withTrashed
方法从路由声明 中移除时,resolveRouteBinding
方法将按预期调用。
复制步骤:
路由/web.php
Route::get('user/user', function(SoftDeletedModel $user)
dd($user);
)->withTrashed(); //withTrashed is used
模型/SoftDeletedModel.php
use SoftDeletes;
public function resolveRouteBinding($value, $field = null)
dd("Successfully Substituted Bindings when using WithTrashed."); //This is not displayed.
return parent::resolveRouteBinding($value, $field);
这是一个已知的错误还是我哪里出错了? github上还有一个issue
【问题讨论】:
【参考方案1】:你需要使用resolveSoftDeletableRouteBinding
这个方法,而不是resolveRouteBinding
。
/**
* Retrieve the model for a bound value.
*
* @param mixed $value
* @param string|null $field
*
* @return \Illuminate\Database\Eloquent\Model|null
*/
public function resolveSoftDeletableRouteBinding($value, $field = null)
return parent::resolveSoftDeletableRouteBinding($value, $field);
【讨论】:
以上是关于在 Route 声明上使用 withTrashed 方法并在 Model 中使用 resolveRouteBinding 时的自定义模型绑定的主要内容,如果未能解决你的问题,请参考以下文章
2022/01/30thinkphp源码无差别阅读(三十二)