Форум программистов, компьютерный форум, киберфорум
Наши страницы
PHP: Symfony
Войти
Регистрация
Восстановить пароль
 
Yourasik
2 / 2 / 6
Регистрация: 31.05.2014
Сообщений: 174
Завершенные тесты: 1
1

ORM, Symfony 4, SQL Запрос

13.06.2018, 09:58. Просмотров 226. Ответов 2

Объясните пожалуйста, как правильно сделать, мне необходимо получить результат следующего запроса:
SQL
1
2
3
4
5
6
SELECT 
    VALUE 
FROM VARIABLES 
WHERE 
    id_language = (SELECT VALUE FROM globalSetting WHERE code = \'lang\' limit 1)
    and code = :code
Для взаимодействия контроллера и сущности я использую следующий mapping :
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
App\Entity\Variables:
  type: entity
  table: variables
  repositoryClass: App\Repository\VariablesRepository
  id:
    id:
      type: guid
  fields:
    name:
      type: string
      length: 50
      nullable: false
    code:
      type: string
      length: 100
      nullable: false
    value:
      type: string
      length: 100
      nullable: false
    id_language:
      type: integer
      length: 11
      nullable: false
Модель:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
namespace App\Entity;
use Doctrine\ORM\Mapping as ORM;
 
class Variables
{
    private $id;
    private $name;
    private $code;
    private $value;
    private $id_language;
 
    public function getId(): int
    {
        return $this->id;
    }
 
    public function getId_language(): int
    {
        return $this->id_language;
    }
 
    public function getValue(): string
    {
        return $this->value;
    }
 
}
Контроллер :
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
namespace App\Controller\Admin;
 
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
 
class AdminsController extends Controller
{
    private $entityManger;
 
    public function __construct()
    {
        $this->entityManger = $this->getDoctrine()->getManager();
    }
 
    public function entrance(Request $request)
    {
        $title = "Admin panel";
 
        if($request->isMethod('POST'))
        {
            $error = "";
            $login = $request->get('login');
            $password = $request->get('password');
 
            $user = $this->entityManger->getRepository('App:Admins')
                ->findOneBy(array('login'=>$login));
 
            if(is_null($user))
            {
                $result = $this->entityManger->getRepository('App:Variables')->getLanguageMessage("AuthorizationError");
                   // ->findOneBy(array('id_language' => $langId, 'code' => 'AuthorizationError'));
 
                print_r($result);
            }
 
 
            return $this->render('admin\login.html.twig', array('title' => $title, 'error' => $error));
        }
        else
        {
            return $this->render('admin\login.html.twig', array('title' => $title));
        }
    }
 
    public function logIn()
    {
        return $this->render('admin\login.html.twig');
    }
}
И VariablesRepository:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
namespace App\Repository;
 
use App\Entity\Product;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Symfony\Bridge\Doctrine\RegistryInterface;
 
/**
 * @method Product|null find($id, $lockMode = null, $lockVersion = null)
 * @method Product|null findOneBy(array $criteria, array $orderBy = null)
 * @method Product[]    findAll()
 * @method Product[]    findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
 */
class VariablesRepository extends ServiceEntityRepository
{
    public function __construct(RegistryInterface $registry)
    {
        parent::__construct($registry, Product::class);
    }
 
    public function getLanguageMessage($code)
    {
        $conn = $this->getEntityManager()->getConnection();
 
        $query =
        "
            select 
                value 
            from variables 
            where 
                id_language = (SELECT value FROM globalSetting WHERE code = \'lang\' limit 1)
                and code = :code
        ";
 
        $stmt = $conn->prepare($query);
        $stmt->execute(['code' => $code]);
 
        // returns an array of arrays (i.e. a raw data set)
        return $stmt->fetchAll();
    }
 
//    /**
//     * @return Product[] Returns an array of Product objects
//     */
    /*
    public function findByExampleField($value)
    {
        return $this->createQueryBuilder('p')
            ->andWhere('p.exampleField = :val')
            ->setParameter('val', $value)
            ->orderBy('p.id', 'ASC')
            ->setMaxResults(10)
            ->getQuery()
            ->getResult()
        ;
    }
    */
 
    /*
    public function findOneBySomeField($value): ?Product
    {
        return $this->createQueryBuilder('p')
            ->andWhere('p.exampleField = :val')
            ->setParameter('val', $value)
            ->getQuery()
            ->getOneOrNullResult()
        ;
    }
    */
}
Я изучаю symfony, до это как правило писал на чистом php, понимаю, что фреймворк должен мне облегчить жизнь, но пока все совсем наоборот, кажется все дико запутанным. Зачем вообще существуют классы Repository? Разве они не нужны только когда mapping прописывается в аннотациях? Пожалуйста подскажите. Без фреймворка я бы давным давно сделал то что мне нужно .
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.06.2018, 09:58
Ответы с готовыми решениями:

Составить запрос с querybuilder. Doctrine 2, Symfony 2
Итак, есть следующие сущности (указаны только ключевые для данной задачи поля),...

ORM запрос Kohana
Всем доброго времени суток. Есть такой запрос. public function...

ORM redbean php
<?php require 'rb.php'; R::setup(...

Kohana, структура файлов ORM
Структура ORM в Kohana, как я понял, такова, что каждая модель, наследуемая от...

Doctrine-module orm выдает 1045
Доброго времени суток! Очень нужна помощь ) пересмотрела все обсуждения этого...

2
ytf
231 / 253 / 183
Регистрация: 15.08.2017
Сообщений: 1,468
19.06.2018, 12:38 2
Цитата Сообщение от Yourasik Посмотреть сообщение
Без фреймворка я бы давным давно сделал то что мне нужно
чтобы пользоваться фреймворком, сначала нужно самому написать фреймворк
0
Jewbacabra
19.06.2018, 19:19     ORM, Symfony 4, SQL Запрос
  #3

Не по теме:

Цитата Сообщение от ytf Посмотреть сообщение
чтобы пользоваться фреймворком, сначала нужно самому написать фреймворк
Можно продолжить:
Чтобы пользоваться ЯП, сначала нужно самому создать ЯП
Чтобы пользоваться компьютером, сначала нужно самому изобрести компьютер
Чтобы использовать электричество, сначала нужно самому сделать свою электростанцию
Чтобы жить дома, сначала нужно самому построить дом
Чтобы покупать еду, сначала нужно самому пойти на охоту
И т.д.

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.06.2018, 19:19
Привет! Вот еще темы с ответами:

ORM ManyToMany как OneManyOne в Symfony2
Уровень познания симфони у меня пока не высок и я совсем запутался в...

Symfony 2.*
Всем привет. Недавно начал изучать Symfony. Я так думаю у меня будет возникать...

Symfony 2
Я новичок в symfony и поэтому решил посоветоватся с теми у кого больше опыта ....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru