2014-07-25 62 views
0

好吧,我想改變我的問題。讓我們看看如何嘗試2去:)Laravel ManyToMany到相同的模型

我有一個工匠的命令來計算每個用戶的總收入。

用戶每天獲得分配的收入。但有時候,我應該如何描述它,他是用另一個用戶的東西賺取收入的。

而那就是assert_user_id列。如果用戶(用戶2)從另一個用戶(用戶1)獲得收入,則在這種情況下,應將這些收入添加到用戶1的收入中。

id, user_id, earnings, asset_user_id 
1, 1,  15,  null 
2, 1,  43,  null 
3, 1,  49,  null 
4, 2,  32,  1 
5, 2,  25,  1 
6, 2,  12,  null 

(在這種情況下,用戶2正在幾乎所有他的錢與內容從用戶1 ...不是很好的他,這就是爲什麼錢)

工匠的命令得到所有用戶。並通過他們的foreach通過他們。

在foreach裏面我們呼籲用戶模型

return $this->sum('earnings');

記憶的方法,我的用戶的內部集合1.

現在我要總結的所有收益,其中asset_user_id = 1。問題是,集合僅保留用戶1的行。

現在問題:

如何訪問用戶集合內的所有其他行。 Yeha我可以在我的模型中使用User:all()函數。但我不認爲這將是固體代碼。那麼,我該如何正確地做到這一點?

+0

聽起來你是問關於MySQL ,而不是拉拉維爾。你有沒有想要轉換的SQL查詢?還是你問如何通過遍歷集合來做到這一點? – Benubird

+0

如何查詢它很容易。這不是問題。但是,我想通過創作者模型/集合來實現。 我使用foreach獲取所有創作者,然後獲取total1以上的集合。現在我正在鎖定一個簡單的方法來獲得total2的集合。 – mfsymb

+0

改說你的問題,所以我們知道,你的預期結果是什麼。雄辯模型和多對多關係如何與它相伴隨? –

回答

0

你可能想要做的是迭代集合foreach並得到自己的款項。

$results = Result::all(); 

$sum1 = 0; 
$sum2 = 0; 

foreach($results as $result) { 
    if($result->creator_id == 1 && $result->status = 'r') { 
     $sum1 += (int)$result->earnings; 
    } 

    if($result->asset_creator_id == 1 && $result->status = 'r') { 
     $sum2 += (int)$result->earnings; 
    } 
} 

還有在Collectionsum方法,這可能是一個更容易一些。只需發送一個回調函數即可返回您正在查找的值。我們將不得不做兩次,但每次你想要的每一筆錢。

$sum1 = $results->sum(function($result) 
{ 
    if($result->creator_id == '1' && $result->status = 'r') { 
     return $result->earnings; 
    } 
}); 

$sum2 = $results->sum(function($result) 
{ 
    if($result->asset_creator_id == '1' && $result->status = 'r') { 
     return $result->earnings; 
    } 
}); 

echo "Creator Earnings: ".$sum1; 
echo "Asset Creator Earnings: ".$sum2; 
0

對數據進行排序,計數,求和總是比使用db查詢更糟糕的解決方案。

反正你的問題是凌亂的,你問status=r,寫status=f總,所以只是猜測,向您展示如何完成與能言善辯的特點:

public function getEarningsForAssetCreator($id) 
{ 
    return $this->where('asset_creator_id', $id) 
      ->where('status', 'f') 
      ->sum('earnings'); 
} 
+0

哈哈:) yeha我的問題有點混亂,我不知道我怎麼能解釋我的問題最好。但你的回答沒有回答我的問題。 問題是,我得到所有的創造者。 所以我在創作者1的集合。但我想要的數據是在創作者2的集合,並不在創作者集合2。 所以我想也許要添加一個關係到同一個表,但另一個模型和外鍵是不同的。而不是id - > creator_id也許id - > asset_creator_id。或者類似的東西。 – mfsymb

+0

好吧,現在忘記那些集合,告訴我什麼是預期的結果? –

+0

預期的結果是,從創建者1的集合中獲取asset_creator_id = 1的所有行,其中只包含創建者1的行。但asset_creator_id = 1行僅在其他創建者的行中。 – mfsymb