2017-10-11 7 views
0

私はexpensesexpense_splitsテーブルを持っています。 両方を1つの結果セットに結合したいと思います。 expense_splitsには、それが所属する費用から属性を追加する必要があります。これについては多くの方法があるようですが、まったく正しいとは思われません。Laravel Eloquentを使用して2つのテーブルを1つの結果セットに結合します。 merge/append/join

たとえば、このような左の結合はほとんど私のために働くが、すべての経費id #sを削除し、expense_splitsだけを保持する。

理想的には、私のexpense_splitsの結果に表示するために、私の経費表のすべての属性が必要です。もちろん、両方のテーブルで属性が同じでない場合は、expense_splits属性を表示します(jelftjoinは私のために行いますが、expenses.idを削除します)。

私は2つのコレクションをマージ/プッシュすることもできます。これは、1つの結果セット内にそれらを表示する迅速な方法です。しかし、私はそれぞれの費用の属性を追加する方法がわかりませんexpense_splits。私はexpense_splitsを通常の経費として扱う必要があります(そして、費用が分かれていると私はそれを表示することはできませんが、後で心配します)。私はどこでも私のアプリでこれを必要としない時間がありません。

$splits = ExpenseSplit::all(); 
$expenses = Expense::all(); 

$expenses = $expenses->merge($splits); 

私もExpenseSplits結果に追加、しかし、正直なところ、これをどこに置くかIDKのか、それも理にかなっている場合することができます。 Expense::all()と呼ばれるたびに呼び出される場所に配置する必要があります。&をアプリ全体にコピーすることはできません。

$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; 

それは単にExpense::all()のようにavaliableだと私expense_splitsテーブルからこれらの分割が含まれますので、このコードを配置するのに最適な場所とは何ですか。もちろん、最初にこれをやり遂げるにはどうすればいいですか?これを行うには多くの方法があるようです。

おかげで、はPatryk

データベース・スキーマ: 経費TABLE:(簡体字) | id | expense_date |金額| project_id |領収書| paid_by | check_id

EXPANSSE_SPLITS表:(簡体字) | id | expnese_id |金額| project_id |

+1

DBスキーマを投稿できますか?これはEloquent関係(これらの左結合/結合クエリの代わりに)を適切に使用して解決できるように思えます。 –

+0

Thantは素晴らしいでしょう!私はそれを上に追加しました。最後に私が探しているのは、ビューで '費用'に「経費精算」を追加することです。だから、私は私の経費表(ビューではなく、私はSQLテーブルを意味する)をプルすると、分割も親の費用の詳細と一緒に含まれています。 – dfeva

+0

Laravelデータベース移行ファイルを使用してテーブルを作成しましたか?あなたは各テーブルの対応するモデルを持っていますか? –

答えて

0

だから私は、あなたのモデルをやったかどうかはわかりませんが、これはそれがどのように見えるかの例である:1場合

class Expenses extends Model 
{ 
    protected $table = 'expenses'; 

    public function splitExpenses() 
    { 
     return $this->hasMany('App\Models\ExpenseSplits'); 
    } 
} 

class ExpenseSplits extends Model 
{ 
    protected $table = 'expense_splits'; 

    public function expenses() 
    { 
     return $this->belongsTo('App\Models\Expenses'); 
    } 
} 


$expenses = Expenses::where('id', 1)->with('splitExpenses')->get(); 

だから、基本的に、あなたの$の費用は、すべてのスプリット経費オブジェクトを持っている必要がありますあなたが雄弁を使用しているので、任意のDB ::テーブルを使用する必要はありません https://laravel.com/docs/5.5/eloquent-relationships

が上に読んで..が存在します。あなたが関係を正しく設定するならば、あなたのためのすべてを世話します。

関連する問題