0
我一直在爲我的Laravel應用程序構建定製門票系統,用戶可以在其門票上放置註釋。從集合中刪除集合
當發表新評論時,我想向通知門票中涉及的每個人發送通知。
用戶可以參與,如果他們是:
- 票證擁有者
- 分配給機票代理
- 邀請作爲參與者的車票
要做到這一點,我正在創建一組用戶,然後通過它們循環來通知他們。唯一的問題是,它目前還包括髮表評論的人,並且他們不需要被通知,因爲他們是離開評論的人。
我試圖集合如果ID匹配當前登錄的用戶刪除用戶,但這似乎並沒有工作:
$ticket = App\Ticket::findOrFail(1);
//Create collection to hold users to be notified
$toBeNotified = collect();
//Add the ticket owner
$toBeNotified->push($ticket->owner);
//If an agent is assigned to the ticket, add them
if(!is_null($ticket->assigned_to)) $toBeNotified->push($ticket->agent);
//Add any active participants that have been invited
$ticket->activeParticipants()->each(function($participant) use ($toBeNotified) {
$toBeNotified->push($participant->user);
});
//Remove any duplicate users that appear
$toBeNotified = $toBeNotified->unique();
//Remove the logged in user from the collection
$toBeNotified->filter(function($user) {
return $user->id != Auth::user()->id;
});
//...loop through each user and notify them
在進一步閱讀,我覺得這是因爲您使用filter
從集合中刪除元素,而不是集合中的集合。
如果用戶是當前登錄的用戶,如何從集合中刪除用戶?
當我dd($toBeNotified)
運行上面後,這是結果:
'except()'不起作用,因爲它排除了基於集合中的鍵的項目,並且鍵與用戶的ID無關。如果你首先通過'keyBy()'鍵入集合的用戶id,它會起作用。 – patricus
@patricus我在這個項目中只用了一週'except' https://github.com/gothinkster/laravel-realworld-example-app/blob/master/database/seeds/DummyDataSeeder.php#L111和i肯定知道它的工作原理。我甚至還爲你自己寫了一個測試。不知道你是否做了這個評論,甚至不費心去測試。檢查我更新的答案。 – Sandeesh
@Sandeesh爲此感謝。我實現了'merge()'來清理代碼,並使用'filter()',但正如你所指出的,我正在改變'$ toBeNotified'來實際設置返回的內容。謝謝您的幫助! – James