<p>If you want to do it in a single query, <a href="https://craftcms.stackexchange.com/a/10460/45">Marion's answer</a> is probably the best.</p>

<p>Otherwise, you could do something like this:</p>

<pre><code>{% set idsHavingCategory = craft.entries.section('news').relatedTo(category).limit(null).ids() %}

{% set omitIds = 'and, not ' ~ idsHavingCategory|join(', not ') %}

{% set entries = craft.entries.section('news').id(omitIds) %}
</code></pre>

<p>Inspired by this article, which shows how to (1) grab ids, and (2) query against them:</p>

<blockquote>
  <p><a href="http://webstoemp.com/blog/manipulating-craft-elementcriteriamodel-with-twig/" rel="noreferrer">http://webstoemp.com/blog/manipulating-craft-elementcriteriamodel-with-twig/</a></p>
</blockquote>

<p>Also references related solutions found in these answers:</p>

<ul>
<li><a href="https://craftcms.stackexchange.com/a/4930/45">https://craftcms.stackexchange.com/a/4930/45</a></li>
<li><a href="https://craftcms.stackexchange.com/a/4573/45">https://craftcms.stackexchange.com/a/4573/45</a></li>
</ul>

CC BY-SA 4.0
2022-03-08T15:20:05.470Z
I know, old question. But any idea how to combine this with a separate query? I'm looking to list entries that either do not have a category, or a specific category. It's proving to be quite a challenge.
InanisAtheos
CC BY-SA 4.0
2022-03-08T18:25:29.633Z
@Athoxx If you want to merge two queries, here is an [old article](https://www.webstoemp.com/blog/manipulating-craft-elementcriteriamodel-with-twig/) (it describes Craft 2) which does a great job of explaining the basic concept. Perform both queries and get **ids**, then use the IDs in a follow up query.
Lindsey D
CC BY-SA 3.0
2015-07-03T19:48:12.907Z
2015-07-03T19:48:12.907Z
2017-04-13T12:51:00.160Z
Lindsey D
<p>I got this to work with <a href="http://buildwithcraft.com/docs/searching" rel="noreferrer">search</a>:</p>

<pre><code>{% set uncategorizedEntries
  = craft.entries.section('news').search('-category:*') %}
</code></pre>

<p>Here <code>category</code> is the category field. You are searching everything in <code>news</code> which does <em>not</em> have a <code>category</code> field that matches <code>*</code>.</p>

CC BY-SA 3.0
2015-07-03T14:52:31.483Z
hmm yea i guess that would work but i cant imagine thats very performant.  Hoping theres a more direct route to get this to work but maybe not yet.
Keith Mancuso
CC BY-SA 3.0
2015-07-02T19:43:33.303Z
2015-07-02T19:43:33.303Z
Marion Newlevant
<p>Another approach -- that might work for you -- is to filter on the output, rather than the query. For instance, using this query:</p>

<pre><code>{% set entries = craft.entries.section('news') %}
</code></pre>

<p>Output using this loop:</p>

<pre><code>{% for entry in entries if entry.category is empty %}
    ...
{% endfor %}
</code></pre>

<p>YMMV</p>

CC BY-SA 3.0
2016-03-09T00:20:56.100Z
2016-03-09T00:20:56.100Z
Brett Gullan
<p>Not sure if this will help much, but I did something similar with:</p>

<p><code>{% set allNews = craft.entries.section('news') %)</code></p>

<p>Then:</p>

<p><code>{% for entry in allNews.id("not #{category.id}")</code> ... <code>{% endfor %}</code></p>

<p>Hope that helps in some way. </p>

CC BY-SA 3.0
2015-07-02T17:56:58.807Z
On second thought, I don't think this is going to be what you're looking for. I'll leave it though, in-case it helps in some other way.
Nicolaides
CC BY-SA 3.0
2015-07-03T14:51:38.317Z
yea thats not really what i need i need to fet all the entries not in a category
Keith Mancuso
CC BY-SA 3.0
2015-07-02T17:11:27.803Z
2015-07-02T17:20:11.073Z
2015-07-02T17:20:11.073Z
Nicolaides
<p>is it possible to grab all the entries in a section that arent related to a category?</p>

<p>So something like</p>

<pre><code>craft.entries.section('news').relatedTo('not',category)
</code></pre>

<p>Doesnt seem to work but is there some other syntax?</p>

<relations>
Get entries NOT related to categories
# Get entries NOT related to categories

(Asked by: username_0 on 2015-07-02)

is it possible to grab all the entries in a section that arent related to a category?
So something like
craft.entries.section('news').relatedTo('not',category)

Doesnt seem to work but is there some other syntax?

**Tags:** relations


---

## 4 answers

### Answer by username_1 on 2015-07-03. Score: 8

If you want to do it in a single query, Marion's answer is probably the best.
Otherwise, you could do something like this:
{% set idsHavingCategory = craft.entries.section('news').relatedTo(category).limit(null).ids() %}

{% set omitIds = 'and, not ' ~ idsHavingCategory|join(', not ') %}

{% set entries = craft.entries.section('news').id(omitIds) %}

Inspired by this article, which shows how to (1) grab ids, and (2) query against them:

http://webstoemp.com/blog/manipulating-craft-elementcriteriamodel-with-twig/

Also references related solutions found in these answers:

https://craftcms.stackexchange.com/a/4930/45
https://craftcms.stackexchange.com/a/4573/45

> **Comments:**
> **username_2**: I know, old question. But any idea how to combine this with a separate query? I'm looking to list entries that either do not have a category, or a specific category. It's proving to be quite a challenge.  
> **username_1**: @Athoxx If you want to merge two queries, here is an [old article](https://www.webstoemp.com/blog/manipulating-craft-elementcriteriamodel-with-twig/) (it describes Craft 2) which does a great job of explaining the basic concept. Perform both queries and get **ids**, then use the IDs in a follow up query.  

---

### Answer by username_3 on 2015-07-02. Score: 5

I got this to work with search:
{% set uncategorizedEntries
  = craft.entries.section('news').search('-category:*') %}

Here category is the category field. You are searching everything in news which does not have a category field that matches *.

> **Comments:**
> **username_0**: hmm yea i guess that would work but i cant imagine thats very performant.  Hoping theres a more direct route to get this to work but maybe not yet.  

---

### Answer by username_4 on 2016-03-09. Score: 3

Another approach -- that might work for you -- is to filter on the output, rather than the query. For instance, using this query:
{% set entries = craft.entries.section('news') %}

Output using this loop:
{% for entry in entries if entry.category is empty %}
    ...
{% endfor %}

YMMV


---

### Answer by username_5 on 2015-07-02. Score: 1

Not sure if this will help much, but I did something similar with:

`{% set allNews = craft.entries.section('news') %)`

Then:

`{% for entry in allNews.id("not #{category.id}")` ... `{% endfor %}`

Hope that helps in some way.

> **Comments:**
> **username_5**: On second thought, I don't think this is going to be what you're looking for. I'll leave it though, in-case it helps in some other way.  
> **username_0**: yea thats not really what i need i need to fet all the entries not in a category  

---

