Я хотел бы расширить свой пользовательский репозиторий. Я найду всех пользователей с указанной ролью или , которые удовлетворяют дополнительному условию.Множество ссылок и построитель запросов
Я пробую несколько запросов с построителем запросов, но безуспешно.
Ниже приведен пример моей структуры базы данных.
TABLENAME: Пользователь
+----+----------+-----------+
| id | isActive | isDeleted |
+----+----------+-----------+
| 1 | 1 | 0 |
+----+----------+-----------+
TABLENAME: Роль
+----+-------+
| id | name |
+----+-------+
| 1 | Admin |
+----+-------+
TABLENAME: USER_ROLE
ManyToMany связь между пользователем и ролью
+---------+---------+
| user_id | role_id |
+---------+---------+
| 1 | 1 |
+---------+---------+
TABLENAME: расстояние
OneToMany связь между пользователем и поваренной расстояния
+----+---------+-----+------+
| id | user_id | lat | long |
+----+---------+-----+------+
| 1 | 1 | | |
+----+---------+-----+------+
Я пишу простой SQL-запрос, который является правильным для меня, но я не знаю, как я могу реализовать отношение многих ко многим к строителю запросов.
SELECT u.id
FROM user as u, user_role as ur
WHERE u.id=ur.user_id and ur.role_id=1 OR
(u.id not in (select user_id from distance) and ur.role_id=1 and u.id=ur.user_id);
Может кто-нибудь дать мне подсказку, как я могу решить эту проблему?
Update
я покажу только некоторые части лиц, из-за читаемости и ясности.
class User implements AdvancedUserInterface, \Serializable
{
/**
* @ORM\Column(type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
* @Exclude
*/
protected $id;
/**
* @ORM\ManyToMany(targetEntity="App\UserBundle\Entity\Role", inversedBy="users")
*
*/
protected $roles;
/**
* @ORM\OneToMany(targetEntity="App\UserBundle\Entity\Distance", mappedBy="user", cascade={"persist", "remove"})
* @Exclude
*/
protected $distance;
}
class Role implements RoleInterface
{
/**
* @ORM\Column(name="id", type="integer")
* @ORM\Id()
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\Column(name="name", type="string", length=255)
* @Exclude
*/
private $name;
/**
* @ORM\ManyToMany(targetEntity="App\UserBundle\Entity\User", mappedBy="roles")
*/
private $users;
}
class Distance
{
/**
* @ORM\Column(type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\ManyToOne(targetEntity="User", inversedBy="distance", cascade={"persist", "remove"})
* @ORM\JoinColumn(name="user_id", referencedColumnName="id")
*/
protected $user;
}
Можете ли вы разместить свои объекты? –
Я добавляю некоторые важные части моих сущностей, это нормально? – smartcoderx
Mab82x, вы можете «пинговать» пользователей в комментариях, добавляя символ «@» перед своим именем. Например, вы могли бы сказать - @LordZed, я добавил некоторые важные части моих сущностей. Достаточно ли этого? - и плакат будет извещен. – AHiggins