将存储过程结果传递给 Laravel API 资源

Posted

技术标签:

【中文标题】将存储过程结果传递给 Laravel API 资源【英文标题】:Passing Stored Procedure result to Laravel API Resource 【发布时间】:2019-10-11 07:50:35 【问题描述】:

我想将执行的存储过程的结果传递给我的PB.vue

但问题是,它给了我一个错误提示:

在数组上调用成员函数 first()

public function index()

    $pbs = DB::select('EXECUTE [dbo].[spQueryContainer]');

    return PBResource::collection($pbs); 

【问题讨论】:

【参考方案1】:

DB::select($query) 返回一个stdclass 对象数组,而不是一个集合。但是,可以使用 collect() 函数对其进行转换:

$pbs = DB::select('EXECUTE [dbo].[spQueryContainer]');

$pbCollection = collect($pbs); //Transform the array into a Laravel Collection of stdclass

return PBResource::collection($pbCollection); 

即使 Collection 包含错误的类型(stdclass 而不是 PB),只要给定对象具有资源中使用的所有属性,资源仍会使用它。

如果您想要更简洁的解决方案,您应该尝试将 stdclass 对象转换为 PB 对象。这个话题在这个post讨论。

【讨论】:

谢谢,它有效,但现在它显示“未定义的方法 stdClass::toBase()”我是否仍然缺少要包含在控制器中的内容? 也许您应该尝试将 stdclass 转换为 PB 对象。您可以通过几个步骤完成此操作:1.Convert stdClass object to an array。 2.将数组作为构造函数参数传递给您的 PB 模型 (Check this article about the $fillable property)。 或者,您可以简单地将属性从您的 stdClass 对象映射到 PB。

以上是关于将存储过程结果传递给 Laravel API 资源的主要内容,如果未能解决你的问题,请参考以下文章

在 azure synapse 存储过程中将表名作为参数传递时将查询结果分配给变量

Laravel - 如何通过资源路由将变量传递给控制器​​?

将 AngularJs 控制器的令牌传递给 Laravel API

如何将结果集作为输入从java传递到oracle存储过程

如何在 laravel 5.5 中将数组作为 API 资源返回

Laravel 4:将从存储库获得的验证消息传递给控制器