J'ai un tableau expenses
et expense_splits
. J'aimerais combiner les deux dans un ensemble de résultats. Chaque expense_splits
devrait avoir ajouté des attributs de la dépense à laquelle il appartient. Il semble qu'il y ait beaucoup de façons de faire, mais aucune ne semble juste.Combinez deux tables dans un jeu de résultats avec Laravel Eloquent. fusionner/ajouter/joindre
Par exemple, un leftjoin comme ça fonctionne presque pour moi mais il supprime toutes mes dépenses id # et ne conserve que expense_splits
.
$expenses = DB::table('expenses')
-leftJoin('expense_splits', 'expenses.id', '=', 'expense_splits.expense_id')
->get();
, j'ai besoin Idéalement, tous les attributs de ma table de frais pour montrer à mon résultat expense_splits
. Sauf si les attributs sont les mêmes sur les deux tables, alors affichez l'attribut expense_splits
(qu'un jelftjoin fait pour moi ... mais il supprime mon expenses.id
).
Je peux aussi fusionner/pousser mes deux collections. C'est un moyen rapide de les montrer dans un ensemble de résultats. Cependant, je ne suis pas sûr comment ajouter des attributs de dépenses à chaque expense_splits
. J'ai besoin que mon expense_splits
soit traité comme une dépense normale (et si une dépense a des fractionnements je ne peux pas l'avoir montré ... mais je m'inquiéterai de cela plus tard). Il n'y aura jamais un moment où je n'ai pas besoin de cela n'importe où sur mon application.
$splits = ExpenseSplit::all();
$expenses = Expense::all();
$expenses = $expenses->merge($splits);
Je peux aussi ajouter à mon résultat ExpenseSplits
, mais, honnêtement, idk où placer tel ou si elle fait même sens. J'en ai besoin placé quelque part où il s'appelle chaque fois que j'appelle Expense::all()
et je ne peux pas copier & coller partout dans l'application.
$expense_split = ExpenseSplit::find(34);
$expense_split->receipt = $expense_split->expense->receipt;
$expense_split->receipt_html = $expense_split->expense->receipt_html;
$expense_split->check_id = $expense_split->expense->check_id;
Quel est le meilleur endroit pour placer ce code il est donc disponible comme simplement Expense::all()
et ces divisions de ma table expense_splits
sera inclus. Et bien sûr, comment puis-je faire cela en premier lieu. Il semble qu'il y ait beaucoup de façons d'y arriver.
Merci, Patryk
schéma de base de données: DÉPENSES TABLE: (Simplified) | id | expense_date | montant | project_id | reçu | paid_by | check_id
TABLE EXPENSE_SPLITS: (SIMPLIFIÉ) | id | expnese_id | montant | project_id |
Pouvez-vous publier votre schéma de base de données? cela semble pouvoir être résolu en utilisant correctement les relations Eloquent (au lieu de ces requêtes de jointure/jointure à gauche). –
Thant serait génial! Je l'ai ajouté ci-dessus. Ce que je cherche à la fin est d'ajouter 'expense_splits' dans mes' dépenses 'dans les vues.Donc, quand je tire ma table de dépenses (dans les vues, pas une table sql je veux dire), les divisions sont incluses ainsi que les détails de la dépense parentale. – dfeva
Avez-vous utilisé les fichiers de migration de base de données Laravel pour créer les tables? et avez-vous les modèles correspondants pour chaque table? –