这个问题的正确(大多数 Laravel)方法是什么(如果有的话)

麦芽糖

在我的应用程序中,我有一个名为“Order”的模型,它遵循默认的 Laravel 行为,并带有一个名为“hash”的附加唯一字符串属性:

class Order extends Model {
  // $table = 'orders'; 
  // $primaryKey = 'id';
  // $incrementing = true;
  $hash = 'a1b2c3d4e5f6g7h8i9';

  // many related models
}

函数 Model::find 的默认行为是查找主键,这是我绝对想要保留的功能。目前我的 routes/api.php 包含这样的功能:

public function show(Request $request, Order $order) {
  // the order will be loaded via the id
  // if the model is not found an exception is thrown
}

在某些情况下,我现在想注入相同的订单,但通过订单的哈希进行搜索,所以我假设我的 api.php 看起来像这样:

public function show(Request $request, OrderSearchByHash $order) {
  // the order will be loaded via the id
  // if the model is not found an exception is thrown
}

问题来了:这是否可以实现,如果是,如何实现?我实际上并不需要源代码,而是对我必须去的方向的提示。我已经阅读了有关 ServiceProviders 和 Facades 的内容,尝试创建一个扩展模型(但我必须“修补”所有关系,因为数据透视表会有不同的名称)以及 Laravel 文档中的许多其他内容,但我仍然没有甚至确切地知道是否以及什么涵盖了我的特定问题?

有人给我提示吗?提前致谢!

马修·费雷

您可以使用自定义模型绑定:

控制器中的两个方法都将如下所示:

public function show(Request $request, Order $order) {
 
}
Route::get('orders/{order}', 'OrderController@show');
Route::get('orders-by-hash/{order_by_hash}', 'OrderController@show');
Route::bind('order_by_hash', function ($value) {
// Use your logic for finding your order by hash
            return Order::where[...]->first();
});

您还可以仅在连接时授权通过 ID 查找订单:

Route::bind('order', function ($value) {
// Use your logic for finding your order by hash
            return Order::where[...]->when(auth()->check(), function()
               $query->orWhere(function($query){
                      $query->where(order_id, $value)
                            ->where(user_id, auth()->id());
                })
)->first();
});

So when you are connected, IF an order with the id belongs to the user , you can find it that way

This is only relevant if your route using an id and your hash are using the same controller's methods, else I recommend to use 2 different model bindings

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如果有的话,CPython中使用的堆栈是什么?

如果有的话,Rebol在红色中的等效性是什么?

ARM7 IT(如果有的话)指令的真正作用是什么?

Haskell:这些表达式的类型是什么(如果有的话)?

如果有的话,apt-file在portage中的等效项是什么?

如果有的话,用内部状态实现排序功能的最佳方法是什么?

如果有的话,如何将变量彼此“接近”存储在C中的规则是什么?

Python 使用标识符而不是变量的原因是什么(如果有的话)?

有什么用例(如果有的话)使类不可移动?

如果有的话,在模型绑定选择的更改中作为参数传递什么?

标准Unix命令使用了什么命名约定(如果有的话)?

++在VB.NET中做什么(如果有的话)?

什么类型的排序算法与此代码最相似?(如果有的话)。

我想让精灵面对鼠标,我想我已经解决了大多数问题,但还有更多问题

如果可能的话,在其组件之一内部访问类组合的正确方法是什么?

Haskell预处理器中的%是什么?它与Uint8之类的类型有什么关系(如果有的话)?

为什么大多数应用程序验证密码不正确需要这么长时间?

Linux上有关于C的任何手册吗?如果有的话,那是什么?

带有多个大多数名称的表中最大名称的sql查询问题

源代码属性VB_VarMemberFlags在VBA中有什么作用(如果有的话)?

将AutoMapper的IMappingEngine与DI一起使用有什么好处(如果有的话)

为什么大多数类是通过函数实例化的?

为什么大多数示例都使用ArrayList

为什么大多数网站都无法使用Cookie?

为什么大多数Typescript npm模块都以@开头?

为什么大多数安装程序无法正常工作?

带有大多数“ o”字符的单词

哪个对象的数组具有大多数特定对象

获取带有大多数子类SimpleXMLObject的xml节点