1 回答

TA貢獻(xiàn)1827條經(jīng)驗(yàn) 獲得超8個(gè)贊
歡迎來(lái)到 SO!
如果你想在這里使用觀察者,你應(yīng)該首先閱讀https://laravel.com/docs/5.8/eloquent#observers和https://laravel.com/docs/5.8/queues
如果您擁有父模型所需的所有數(shù)據(jù),這可能會(huì)起作用,因?yàn)槟恍鑼⒃撃P蛡鬟f給觀察者觸發(fā)的作業(yè)。如果不是,那么觀察者/工作可能不是您的最佳解決方案。相反,我可能會(huì)創(chuàng)建某種服務(wù),您可以在其中轉(zhuǎn)移創(chuàng)建這些關(guān)系的責(zé)任。這樣你就可以保持一個(gè)干凈的控制器級(jí)別,它只調(diào)用一個(gè)服務(wù)來(lái)創(chuàng)建模型,然后返回結(jié)果。
這方面的一個(gè)例子可能是:
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...
}
}
這是我將如何做的一個(gè)簡(jiǎn)化示例。希望對(duì)你有所幫助。
如果您仍然想使用工作來(lái)解決這個(gè)問(wèn)題,那么我仍然認(rèn)為觀察者不是您的正確解決方案,因?yàn)樗鼈兪窃谀P褪录嫌|發(fā)的,例如created. 這意味著你在那個(gè)時(shí)候?qū)o(wú)法訪問(wèn)請(qǐng)求對(duì)象,而只是被創(chuàng)建(模型)。相反,您可以直接從控制器/服務(wù)分派作業(yè)。我在答案頂部發(fā)布的隊(duì)列鏈接中對(duì)此進(jìn)行了全部描述。
- 1 回答
- 0 關(guān)注
- 196 瀏覽
添加回答
舉報(bào)