2017-10-11 329 views
0

我有一個expensesexpense_splits表。 我想將兩者合併成一個結果集。每個expense_splits都應該從它所屬的費用中添加屬性。似乎有很多方法可以解決這個問題,但沒有一個看起來恰到好處。用Laravel Eloquent將兩個表合併成一個結果集。合併/追加/加入

例如,這樣的leftjoin幾乎適用於我,但它刪除了我所有的費用id #s並且只保留expense_splits

$expenses = DB::table('expenses') 
      -leftJoin('expense_splits', 'expenses.id', '=', 'expense_splits.expense_id') 
      ->get(); 

理想情況下,我需要從我的費用表中的所有屬性在我expense_splits結果顯示。除非兩個表上的屬性都是相同的,否則顯示expense_splits屬性(jelftjoin對我來說是這樣做的,但它會刪除我的expenses.id)。

我也可以合併/推送我的兩個集合。這是在一個結果集內顯示它們的快速方法。但是,我不確定如何將費用屬性添加到每個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; 

什麼是把這個代碼,以便它avaliable簡單,如Expense::all()從我expense_splits表中的這些裂縫將被列入的最佳場所。當然,我該如何着手做這件事。看起來有很多方法可以完成。

感謝,Patryk

數據庫模式: 開支表:(簡體) | id | expense_date |數額| project_id |收據| paid_by | check_id

EXPENSE_SPLITS TABLE:(SIMPLIFIED) | id | expnese_id |數額| project_id |

+1

你可以發佈你的數據庫架構嗎?這聽起來像可以通過正確使用Eloquent關係來解決(而不是這些左連接/連接查詢)。 –

+0

Thant會很棒!我已經在上面添加了它。我最終尋找的是在視圖中將'expense_splits'附加到我的'費用'中。因此,當我拉起我的費用表(在視圖中,而不是我的意思是一個SQL表)時,分割以及來自父母費用的細節一起包括在內。 – dfeva

+0

您是否使用Laravel數據庫遷移文件創建表格?你有沒有得到每個表的相應模型? –

回答

0

所以我不知道你是如何做你的模型,但是這是它應該是什麼樣子的例子:

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(); 

所以基本上你的$開支應有的一切,如果一個分割費用的對象存在..

閱讀上: https://laravel.com/docs/5.5/eloquent-relationships

沒有必要,因爲你用雄辯使用任何DB ::表。如果您正確設置關係,它會爲您處理所有事情。