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 關注
- 201 瀏覽
添加回答
舉報