J'ai un projet dans lequel chaque client a un sous-domaine unique et sa propre base de données. Je souhaite utiliser les files d'attente de Laravel pour traiter les tâches et envoyer des notifications. Mais comme le trait SerializesModels ne sérialise/ne désérialise que l'identificateur de modèle, le travail tente toujours d'extraire les données de la base de données principale, quel que soit le client qui initie le travail.Laravel, beanstalkd et plusieurs bases de données
Existe-t-il un moyen de spécifier une connexion db? Si ce n'est pas faisable, je suis ouvert à d'autres workflows suggérés.
Des Laravel docs:
modèles Eloquent seront gracieusement sérialisés et sérialisé lorsque le travail est en cours de traitement. Si votre travail en attente accepte un modèle Éloquent dans son constructeur, seul l'identificateur du modèle sera sérialisé dans la file d'attente. Lorsque le travail est effectivement traité, le système de file d'attente récupère automatiquement l'instance de modèle complète dans la base de données. Tout est totalement transparent pour votre application et évite les problèmes pouvant survenir lors de la sérialisation d'instances de modèle Eloquent complètes.
Exemple: Donc, un travail est envoyé avec l'ordre du OrderController
dispatch(new SendEventSignupEmail($order));
L'ordre est injecté par le constructeur dans la classe d'emploi
public function __construct(Order $order)
{
//
$this->order = $order;
}
Je crois comprendre que l'identifiant du modèle extrait et sérialisé et envoyé à la méthode du handle où il est non sérialisé et le modèle est récupéré à partir de la base de données.
public function handle()
{
Mail::to($this->order)->send(new EventSignup($this->order));
}
Le problème est que, à ce stade, $ this-> commande est en fait un ordre différent (ou le travail échoue) parce que le trait serializesModels récupéré le modèle de la db par défaut.