Я работаю над Symfony 3 и у меня возникли проблемы со сборщиком в моем хранилище.
Как это работает:
У меня есть объявление, в котором есть много информации, такой как имя, игра и т. Д.
И пользовательская ссылка по отношению OneToOne
Я отправляю вам часть из моего объявления
class Announce
{
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\OneToOne(targetEntity="Wolk\UsersBundle\Entity\User")
* @ORM\JoinColumn(nullable=false)
*/
private $user;
/**
* @var string
*
* @ORM\Column(name="game", type="string", length=255)
*/
private $game;
Etc...
Теперь вы можете увидеть мой репозиторий
public function byResearch($role, $game, $region, $language, $rank, $gamemode, $matchtype, $platform)
{
$qb = $this->createQueryBuilder('u')
->select('u');
if ($language != null) {
$qb->join('u.user' , 's');
$qb->addSelect('s');
$qb->andWhere('s.language like \''.$language.'\'');
}
if ($gamemode!= null) {
$qb->andWhere('u.gamemode = \''.$gamemode.'\'');
}
if ($matchtype!= null) {
$qb->andWhere('u.matchtype = \''.$matchtype.'\'');
}
if ($region!= null) {
$qb->andWhere('u.region = \''.$region.'\'');
}
if ($rank!= null) {
$qb->andWhere('u.rank like \'%'.$rank.'%\'');
}
if ($platform!= null) {
$qb->andWhere('u.platform like \'%'.$platform.'%\'');
}
if ($game!= null) {
$qb->andWhere('u.game = \''.$game.'\'');
}
if ($role!= null) {
foreach($role as $itm1)
{
$qb->andWhere('u.role like \'%'.$itm1.'%\'' );
}
}
$qb->andwhere('u.active = :active');
$qb->setParameter('active', '1');
$qb->orderBy('u.date', 'DESC');
return $qb->getQuery()->getResult();
}
Моя проблема связана с языком моего пользователя
Люди будут искать только объявления на французском, немецком и английском языках, и все пользователи будут иметь весь свой язык в сущности пользователя
User.Language = Array ('fr', 'en') // что-то в этом роде
И на самом деле у меня есть этот результат на моем сайте (от профилировщика)
SELECT
a0_.id AS id_0,
a0_.game AS game_1,
a0_.platform AS platform_2,
a0_.Availability AS Availability_3,
a0_.language AS language_4,
a0_.Description AS Description_5,
a0_.category AS category_6,
a0_.goal AS goal_7,
a0_.Rank AS Rank_8,
a0_.active AS active_9,
a0_.premium AS premium_10,
a0_.level AS level_11,
a0_.visit AS visit_12,
a0_.region AS region_13,
a0_.role AS role_14,
a0_.exp AS exp_15,
a0_.lan AS lan_16,
a0_.gamemode AS gamemode_17,
a0_.matchtype AS matchtype_18,
a0_.date AS date_19,
f1_.username AS username_20,
f1_.username_canonical AS username_canonical_21,
f1_.email AS email_22,
f1_.email_canonical AS email_canonical_23,
f1_.enabled AS enabled_24,
f1_.salt AS salt_25,
f1_.password AS password_26,
f1_.last_login AS last_login_27,
f1_.confirmation_token AS confirmation_token_28,
f1_.password_requested_at AS password_requested_at_29,
f1_.roles AS roles_30,
f1_.id AS id_31,
f1_.gender AS gender_32,
f1_.birthday AS birthday_33,
f1_.subscribedate AS subscribedate_34,
f1_.Country AS Country_35,
f1_.language AS language_36,
f1_.timezone AS timezone_37,
a0_.user_id AS user_id_38,
f1_.image_id AS image_id_39,
f1_.premium_id AS premium_id_40
FROM
announce a0_
INNER JOIN fos_user f1_ ON a0_.user_id = f1_.id
WHERE
f1_.language LIKE 'fr'
AND a0_.platform LIKE '%PC%'
AND a0_.game = 'lol'
AND a0_.active = ?
ORDER BY
a0_.date DESC
И я действительно не знаю, что плохого в языковом поиске
Возможно, присоединение неверно для отношения OneToOne?
Может быть, "где, как" для массива не является хорошим решением?
Я ищу целый день, не зная, какие вещи не работают, поэтому я надеюсь, что вы можете помочь мне в этом:)
Если вам нужна дополнительная информация, она будет с удовольствием