1 回答
TA贡献1827条经验 获得超8个赞
欢迎来到 SO!
如果你想在这里使用观察者,你应该首先阅读https://laravel.com/docs/5.8/eloquent#observers和https://laravel.com/docs/5.8/queues
如果您拥有父模型所需的所有数据,这可能会起作用,因为您只需将该模型传递给观察者触发的作业。如果不是,那么观察者/工作可能不是您的最佳解决方案。相反,我可能会创建某种服务,您可以在其中转移创建这些关系的责任。这样你就可以保持一个干净的控制器级别,它只调用一个服务来创建模型,然后返回结果。
这方面的一个例子可能是:
namespace App\Http\Controllers;
use App\Models\Something\SomeService;
class SomeController extends Controller
{
/**
* @var SomeService
*/
private $someService;
public function __construct(SomeService $someService)
{
$this->someService = $someService;
}
public function store()
{
$request = request();
$name = $request->input('name');
$something = $this->someService->create($name);
return response()->json(['data' => $something]);
}
}
namespace App\Models\Something;
class SomeService
{
public function create(string $name): Something
{
// Do whatever in here...
}
}
这是我将如何做的一个简化示例。希望对你有所帮助。
如果您仍然想使用工作来解决这个问题,那么我仍然认为观察者不是您的正确解决方案,因为它们是在模型事件上触发的,例如created. 这意味着你在那个时候将无法访问请求对象,而只是被创建(模型)。相反,您可以直接从控制器/服务分派作业。我在答案顶部发布的队列链接中对此进行了全部描述。
- 1 回答
- 0 关注
- 181 浏览
添加回答
举报