My table looks like this:
create table user(
user_id int,
name varchar(10)
);
create table orders(
user_id int,
product varchar(255));
insert into user(user_id, name)
values
(1,'Chris'),
(2,'Jon');
insert into orders(user_id, product) values
(1, 'prod1'),
(1, 'prod1'),
(1, 'prod2'),
(2, 'prod3');
I want to get all users which ordered prod1.
So the result table should look like this:
+---------+-------+
| user_id | name |
+---------+-------+
| 1 | Chris |
+---------+-------+
It would be best if it is possible to do this with join's. I tried something like this:
$users = $this->createQueryBuilder(User::class, 'u')
->leftjoin('u.orders', 'o')
->where('o.product = "prod1"')
->orWhere('o.product = "prod2"')
->getQuery()
->getResult()
But it is not working for me, I get an empty array.
Fiddle: https://www.db-fiddle.com/f/gVBzt9i16CTRcQLCPoBezP/2
XML mapping for User:
<entity name="User" table="users">
<id name="userId" type="int" column="user_id" />
<field name="name" type="string" nullable="true" />
<one-to-many field="orders"
target-entity="Order"
mapped-by="user">
</one-to-many>
</entity>
XML mapping for Order:
<entity name="Order" table="orders">
<field name="userId" type="int" column="user_id" />
<field name="product" type="string" nullable="true" />
<many-to-one field="user"
target-entity="Order"
mapped-by="orders">
</many-to-one>
</entity>