@Parsifal31017
Программист

Правильно ли я подключила Doctrine?

Здравствуйте, хотела бы узнать правильно ли я настроила Doctrine.
Сначала я создала файл composer.json
{
  "require": {
    "doctrine/orm": "^2.6.2",
    "symfony/yaml": "2.*"
  },
  "autoload": {
    "psr-0": { "": "src/" }
  }
}

потом я скачала Doctrine через командную строку с помощью команды - $ composer install. Потом я создала файлы
bootstrap.php
// bootstrap.php
use Doctrine\ORM\Tools\Setup;
use Doctrine\ORM\EntityManager;

require_once "vendor/autoload.php";

// Create a simple "default" Doctrine ORM configuration for Annotations
$isDevMode = true;
$proxyDir = null;
$cache = null;
$useSimpleAnnotationReader = false;
$config = Setup::createAnnotationMetadataConfiguration(array(__DIR__."/src"), $isDevMode, $proxyDir, $cache, $useSimpleAnnotationReader);
// or if you prefer yaml or XML
//$config = Setup::createXMLMetadataConfiguration(array(__DIR__."/config/xml"), $isDevMode);
//$config = Setup::createYAMLMetadataConfiguration(array(__DIR__."/config/yaml"), $isDevMode);

// database configuration parameters
$conn = array(
    'dbname' => 'desktop-e7l10uh.my-dream-app.dbo',
    'user' => 'root',
    'password' => '',
    'host' => 'localhost',
    'driver' => 'pdo_sqlite',
    'path' => __DIR__ . '/db.sqlite'
    );

// obtaining the entity manager
$entityManager = EntityManager::create($conn, $config);

Если у вас возник вопрос откуда я взяла dbname, то вот
5f9bd8fb1398f504614487.png

и cli-config.php
// cli-config.php
require_once "bootstrap.php";

return \Doctrine\ORM\Tools\Console\ConsoleRunner::createHelperSet($entityManager);


Потом я создала файлы создания таблиц.
User.php
// src/User.php
class User
{
  /**
   * @Entityy @Table (name="users")*/

  /**
   * @ID @Column (type="integer") @GeneratedValue*/
  protected $id;
  /**
   * @Column (type="string")*/
  protected $name;
  /**
   * @Column (type="string")*/
  protected $email;

  /**
   * @Column (type="string")*/
  protected $password;

  public function getId()
  {
    return $this->id;
  }

  public function getName()
  {
    return $this->name;
  }

  public function setName($name)
  {
    $this->name = $name;
  }

  public function getEmail()
  {
    return $this->email;
  }

  public function setEmail($email)
  {
    $this->email = $email;
  }

  public function getPassword()
  {
    return $this->password;
  }

  public function setPassword($password)
  {
    $this->password = $password;
  }
}


Company.php
// src/Company.php
class Company
{
  /**
   * @Entityy @Table (name="company")*/

  /**
   * @ID @Column (type="integer") @GeneratedValue*/
  protected $id;
  /**
   * @Column (type="string")*/
  protected $name;
  /**
   * @Column (type="string")*/
  protected $news;

  /**
   * @Column (type="string")*/
  protected $video;
  /**
   * @Column (type="string")*/
  protected $description;
  /**
   * @Column (type="string")*/
  protected $tags;


  public function getId()
  {
    return $this->id;
  }

  public function getName()
  {
    return $this->name;
  }

  public function setName($name)
  {
    $this->name = $name;
  }

  public function getNews()
  {
    return $this->news;
  }

  public function setNews($news)
  {
    $this->news = $news;
  }

  public function getVideo()
  {
    return $this->video;
  }

  public function setVideo($video)
  {
    $this->news = $video;
  }

  public function getDescription()
  {
    return $this->description;
  }

  public function setDescription($description)
  {
    $this->description = $description;
  }

  public function getTags()
  {
    return $this->tags;
  }

  public function setTags($tags)
  {
    $this->tags = $tags;
  }
}


Admin.php
// src/Admin.php
class Company
{
  /**
   * @Entityy @Table (name="admin")*/

  /**
   * @ID @Column (type="integer") @GeneratedValue*/
  protected $id;
  /**
   * @Column (type="string")*/
  protected $name;
  /**
   * @Column (type="string")*/
  protected $thematics;
  /**
   * @Column (type="string")*/
  protected $bonus;
  /**
   * @Column (type="string")*/
  protected $medals;


  public function getId()
  {
    return $this->id;
  }

  public function getName()
  {
    return $this->name;
  }

  public function setName($name)
  {
    $this->name = $name;
  }

  public function getThematics()
  {
    return $this->thematics;
  }

  public function setThematics($thematics)
  {
    $this->thematics = $thematics;
  }

  public function getBonus()
  {
    return $this->bonus;
  }

  public function setBonus($bonus)
  {
    $this->bonus = $bonus;
  }

  public function getMedals()
  {
    return $this->medals;
  }

  public function setMedals($medals)
  {
    $this->medals = $medals;
  }
}


Потом я ввела команду в командной строке по созданию таблиц в БД - $ vendor/bin/doctrine orm:schema-tool:update --force --dump-sql
И на этом месте у меня возникла ошибка
5f9bd86f1b0fd809465578.png
Почему? Что я не так сделала? Или не сделала?
В качестве сервера используется SQL Server. Приложение было создано при помощи Angular CLI.
Заранее спасибо.
  • Вопрос задан
  • 94 просмотра
Решения вопроса 1
@sl0
array(__DIR__."/src"),
В винде и линуксе разные слеши. Можно использовать DIRECTORY_SEPARATOR вместо "/", но на будущее я бы очень советовал работать именно в линуксовой среде (wsl, vagrant, виртуалка, вторая система - вариантов уйма). Поверьте, это не последний затык, с которым придется столкнуться разрабатывая веб под виндой.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@FanatPHP
Чебуратор тега PHP
Во-первых, подключена доктрина неправильно.
Не надо было создавать новую папку и новый композер джейсон - в корне проекта уже есть файлы композера, надо было редактировать их
а лучше без всякого редактирования - просто composer require doctrine/orm

Во-вторых, касательно ошибки. Я сам доктрину никогда не ставил - всегда пользовался уже готовой в составе симфони - но погуглив слово createAnnotationMetadataConfiguration ясно увидел что в первом параметре передается параметр
$paths = array("/path/to/entity-files");
что переводится как путь к папке с сущностями. А не какое-то магическое заклинание __DIR__."/src", которое по всей видимости должно означать "догадайся какой путь тут нужен и подставь само".
К сожалению, заклинания в программировании не работают и надо передавать существующий путь. В данном случае к папке, в которой лежат User.php, Admin.php и прочее
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы