簡體   English   中英

如何獲得沒有特定相關實體的所有實體?

[英]How can I get all entities without a specific related entity?

我有這些表:

用戶

id 
name 

事件

id 
name

id
user_id
event_id

如何獲得所有沒有event_id 4條目的用戶?

使用此代碼:

 $users = User::query();
 $users->leftJoin('entries', 'users.id', '=', 'entries.user_id')
       ->where('event_id','!=', $event_id)->get();

我仍然得到已經有該特定事件條目的用戶。

這就是我要的:

  • 獲取所有具有event_id 4的條目
  • 從這些條目中獲取user_id
  • 刪除具有該user_id的其他條目。

$entries = Entry::where(event_id, '=', 4)->get();

foreach ($entries as &$entry) {
    //remove all entries from $entries array which "user_id = $entry->user_id"
}

僅憑查詢我該如何做?

以下是您提出的問題的答案,但是我想這不是您最終想要的。 進一步詳細說明並指定樣本輸入和輸出數據集

select * from your_table where event_id <> 4;

您想要的SQL是:

select user_id
from t 
group by user_id
having sum(event_id = 4) = 0;
select u.*
  from User u
  left join entries e
  on e.user_id = u.id and e.event_id = 4
  where e.id is null

您在尋找<> ,而不是!= 另外,您也不會讓它知道哪個表event_id處於打開狀態。

嘗試

 $users = User::query();
 $users->leftJoin('entries', 'users.id', '=', 'entries.user_id')
       ->where('entries.event_id','<>', $event_id)->get();

可以在https://laravel.com/docs/5.4/queries#where-clauses中找到更多信息。

您可以使用whereDoesntHave構建器方法。

$users = User::query()->whereDoesntHave("entry", function($q) use ($event_id) {
    $q->where('id', $event_id);
})->get();

該方法采用閉包形式,您可以在其中為必須不存在的相關實體定義條件。


如果您需要用戶和條目,我認為您仍然可以使用with加入條目。

$users = User::query()
    ->with('entries')
    ->whereDoesntHave("entry", function($q) use ($event_id) {
        $q->where('id', $event_id); })
    ->get();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM