Symfony2 Doctrine skipping over a bundles Entities - php

I have two bundles both under Site.. Any Entity i create in User is processed but any entity that is added to Core is skipped.. I moved all the Entities from User to Core and created a text Entity but know im getting an error:
No Metadata Classes to process.
The test class looks like this:
<?php
namespace Site\CoreBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* Test
*
* #ORM\Table(name="user_address_type")
* #ORM\Entity
*/
class Test
{
/**
* #var integer
*
* #ORM\Column(name="Test", type="integer")
* #ORM\Id
* #ORM\GeneratedValue(strategy="IDENTITY")
*/
private $addressTypeId;
/**
* #var string
*
* #ORM\Column(name="address_description", type="string", length=100, nullable=true)
*/
private $address_description;
}
My config is this:
# Doctrine Configuration
doctrine:
dbal:
default_connection: default
connections:
default:
driver: "%database_driver%"
host: "%database_host%"
port: "%database_port%"
dbname: "%database_name%"
user: "%database_user%"
password: "%database_password%"
charset: UTF8
# if using pdo_sqlite as your database driver, add the path in parameters.yml
# e.g. database_path: "%kernel.root_dir%/data/data.db3"
# path: "%database_path%"
orm:
default_entity_manager: default
entity_managers:
default:
connection: default
mappings:
SiteCoreBundle: ~
SiteUserBundle: ~
I have searched all over the place with no answer to be found. The closet was about using multiple connections which is where the config came from.
Thanks..

Related

Symfony table entity has itself recognized as repository as well

New to both Symfony and StackOverflow as an OP.
I'm on a way adding new mysql table entities and repositories on Symfony(4.3.2) and get stuck as I test it.
I really appreciate someone's help.
The error I got was
[2020-07-13 03:25:59] request.CRITICAL: Uncaught PHP Exception RuntimeException: "The "App\Entity\Foo" entity has a repositoryClass set to "App\Repository\Foo", but this is not a valid class. Check your class naming. If this is meant to be a service id, make sure this service exists and is tagged with "doctrine.repository_service"." at /var/www/html/bar_project/vendor/doctrine/doctrine-bundle/Repository/ContainerRepositoryFactory.php line 66 {"exception":"[object] (RuntimeException(code: 0): The \"App\\Entity\\Foo\" entity has a repositoryClass set to \"App\\Repository\\Foo\", but this is not a valid class. Check your class naming. If this is meant to be a service id, make sure this service exists and is tagged with \"doctrine.repository_service\". at /var/www/html/bar_project/vendor/doctrine/doctrine-bundle/Repository/ContainerRepositoryFactory.php:66)"} []
where Foo at /App/Entity/ is an entity for the table foo.
and the problem is that it tries to refer to Foo at App/Repository/ as its repository which doesn't exist, but not FooRepository which exists.
(Updated this paragraph following the comment from Jakumi)
(FooController.php)
$repository = $this->getDoctrine()->getRepository(Foo::class);
(Foo.php)
<?php
namespace App\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* #ORM\Table(name="foo")
* #ORM\Entity(repositoryClass="App\Repository\FooRepository") // *1
*/
class Foo
{
...
(FooRepository.php)
<?php
namespace App\Repository;
use App\Entity\Foo;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Symfony\Bridge\Doctrine\RegistryInterface;
/**
* #method Foo|null find($id, $lockMode = null, $lockVersion = null)
* ...
*/
class FooRepository extends ServiceEntityRepository
{
...
One thing I find mysterious is that the same error log still shows up even if I remove *1.
(I think I have yarn watch and cache clear appropriately working.)
Additional Info 1
(doctrine.yaml)
doctrine:
dbal:
# configure these for your database server
driver: 'pdo_mysql'
server_version: '8.0'
charset: utf8mb4
default_table_options:
charset: utf8mb4
collate: utf8mb4_unicode_ci
# dbname:
# host:
# port:
# user:
# password:
url: '%env(resolve:DATABASE_URL)%'
options:
1002: 'SET sql_mode=(SELECT REPLACE(##sql_mode, "ONLY_FULL_GROUP_BY", ""))'
orm:
auto_generate_proxy_classes: true
naming_strategy: doctrine.orm.naming_strategy.underscore
auto_mapping: true
metadata_cache_driver: apcu
result_cache_driver: apcu
query_cache_driver: apcu
connection: ~
mappings:
App:
is_bundle: false
type: annotation
dir: '%kernel.project_dir%/src/Entity'
prefix: 'App\Entity'
alias: App
dql:
string_functions:
group_concat: DoctrineExtensions\Query\Mysql\GroupConcat
date_format: DoctrineExtensions\Query\Mysql\DateFormat

Symfony2 Doctrine, generate:entities

I learn Symfony2 and i have a problem with database. I use this documentation: http://symfony.com/doc/2.7/book/doctrine.html
I have Product.php class, but when i try execute this command:
php app/console doctrine:generate:entities AppBundle/Entity/Product
i get error:
"Class "AppBundle\Entity\Product" is not a valid entity or mapped super class."
This is my Product.php file:
<?php
/**
* Created by PhpStorm.
* User: Marcin
* Date: 20.12.2015
* Time: 23:33
*/
namespace AppBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* #ORM\Entity
* #ORM\Table(name="product")
*/
class Product
{
/**
* #ORM\Column(type="integer")
* #ORM\Id
* #ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* #ORM\Column(type="string", length=100)
*/
protected $name;
/**
* #ORM\Column(type="decimal", scale=2)
*/
protected $price;
/**
* #ORM\Column(type="text")
*/
protected $description;
}
Other people have the same error, but they don't have "#ORM\Entity" in their code. I have, but problem still existing.
I have no idea what's going on...
Update:
This is fragment of config.yml:
doctrine:
dbal:
driver: pdo_mysql
host: localhost
port: 3306
dbname: db_name
user: db_user
password: db_password
charset: UTF8
# if using pdo_sqlite as your database driver:
# 1. add the path in parameters.yml
# e.g. database_path: "%kernel.root_dir%/data/data.db3"
# 2. Uncomment database_path in parameters.yml.dist
# 3. Uncomment next line:
# path: "%database_path%"
orm:
auto_generate_proxy_classes: "%kernel.debug%"
naming_strategy: doctrine.orm.naming_strategy.underscore
auto_mapping: true
Updated2:
I changed config.yml:
orm:
auto_generate_proxy_classes: "%kernel.debug%"
# naming_strategy: doctrine.orm.naming_strategy.underscore
# auto_mapping: true
entity_managers:
default:
mappings:
AppBundle: ~
And when i use:
php app/console doctrine:mapping:info
I get:
"You do not have any mapped Doctrine ORM entities according to the current configuration. If you have entities or mapping files you should check your mapping configuration for errors."

"Class XXX is not a valid entity or a mapped super class" error when using php app/console

I'm following this Symfony2/Doctrine guide and I've come to the part where I need to create getters/setters. but I am stuck with this part:
$ php app/console doctrine:generate:entities Acme/StoreBundle/Entity/Job
I've searched the net for possible solutions (seems to mainly revolve around using 2 asterisks for the start) but couldn't find the solution.
Some info:
Bundle is properly loaded (via AppKernel.php) as I have a test "hello world" and that works.
The namespace path is correct
Job.php exists in the right folder
I'm using postgres as my database. I'm not sure if this matters.
I have tried with and without the use Doctrine\ORM\Mapping line in model class (see below for code)
I don't think I'm running a accelerator at least according to get_loaded_extensions function
Any ideas would be very helpful.
Thanks a lot :)
snippet of my settings.yml
doctrine:
dbal:
driver: "%database_driver%"
host: "%database_host%"
port: "%database_port%"
dbname: "%database_name%"
user: "%database_user%"
password: "%database_password%"
charset: UTF8
# if using pdo_sqlite as your database driver, add the path in parameters.yml
# e.g. database_path: "%kernel.root_dir%/data/data.db3"
# path: "%database_path%"
orm:
auto_generate_proxy_classes: "%kernel.debug%"
auto_mapping: true
Model class
<?php
// src/MyApp/MyBundle/Model/Job.php
namespace MyApp\MyBundle\Model;
use Doctrine\ORM\Mapping as ORM;
/**
* MyApp\MyBundle\Model\Job
*
* #ORM\Entity
* #ORM\Table(name="myschema.jobs")
*/
class Job {
/**
* #ORM\Column(name="job_id", type="integer")
* #ORM\Id
* #ORM\GeneratedValue(strategy="AUTO")
*/
protected $jobid;
/**
* #ORM\Column(name="name", type="text")
*/
protected $name;
/**
* #ORM\Column(name="job_desc", type="text")
*/
protected $description;
/**
* #ORM\Column(name="personal_req", type="text")
*/
protected $requirements;
}
did you create your entity using doctrine? I saw on your Job.php entity you are using annotation as mapping format.
In error output it said doctrine can't find any mapped entities. I've been there and it solved with specific configuration of your config.yml.
Try to change this on your config.yml
doctrine:
dbal:
driver: "%database_driver%"
#etc
orm:
auto_generate_proxy_classes: "%kernel.debug%"
auto_mapping: false
mappings:
MyAppMyBundle:
type: annotation #On your case it should be annotation
dir: Resources/Model/
Read this maybe it can help:
Doctrine Mapping in Symfony2 using YAML
Have you tried using following console command ?
$ php app/console doctrine:generate:entities MyApp/MyBundle/Model
I hope it will work. Your entity namespace is different than Acme/StoreBundle/Entity/Product. Your entities are in Model directory/namespace so you should use first argument of command a valid namespace. So that following cmd generates error as you have mentioned above.
$ php app/console doctrine:generate:entities Acme/StoreBundle/Entity/Product

Error generating entity with Symfony2

I am generating an Entity from php Class:
<?php
// src/Printing/Productesbundle/Entity/User.php
namespace Printing\ProductesBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* #ORM\Entity
* #ORM\Table(name="UsersStamp")
*/
class UserStamp
{
/**
* #ORM\Column(type="integer")
* #ORM\Id
* #ORM\GeneratedValue
*/
private $id;
}
?>
When I execute
php app/console doctrine:generate:entities Printing/ProductesBundle/Entity/UserStamp
it returns me the following error
[Doctrine\ORM\Mapping\MappingException]
Class "Printing\ProductesBundle\Entity\UserStamp" is not a valid entity or mapped super class.
What am i missing??
Thank you!
PS:
That's my Doctrine Configuration:
# Doctrine Configuration
doctrine:
dbal:
driver: "%database_driver%"
host: "%database_host%"
port: "%database_port%"
dbname: "%database_name%"
user: "%database_user%"
password: "%database_password%"
charset: UTF8
# if using pdo_sqlite as your database driver, add the path in parameters.yml
# e.g. database_path: "%kernel.root_dir%/data/data.db3"
# path: "%database_path%"
orm:
auto_generate_proxy_classes: "%kernel.debug%"
auto_mapping: true
Could you try command below?
app/console doctrine:generate:entities PrintingProductesBundle:UserStamp
I think you need to execute something like this
php app/console doctrine:generate:entities ProductesBundle
After trying some tricks I found the solution.
I guess the error radicates on the fact that I have entities generated previously from database.
To solve this question, you have to remove the content of the config/doctrine folder.
Thanks to #Javad to keep trying!

Doctrine not detecting schema changes with one entity manager and multiple databases

Using Symfony-2.1 and Doctrine-2.3. I have multiple databases and need to do cross-database joins so I followed the suggestions in:
Multiple database connection in Doctrine2 and Zend framework
Using Relationships with Multiple Entity Managers
and set up multiple connections and one entity manager. Here is app/config/config.yml:
doctrine:
dbal:
default_connection: db1
connections:
db1:
driver: pdo_mysql
host: 127.0.0.1
dbname: db1
db2:
driver: pdo_mysql
host: 127.0.0.1
dbname: db2
orm:
default_entity_manager: default
auto_generate_proxy_classes: %kernel.debug%
entity_managers:
default:
auto_mapping: true
mappings:
FirstBundle:
type: annotation
dir: Model
prefix: NoiseLabs\FirstBundle\Model
SecondBundle:
type: annotation
dir: Model
prefix: NoiseLabs\SecondBundle\Model
Entity class in FirstBundle:
namespace NoiseLabs\FirstBundle\Model;
/**
* #ORM\Entity
* #ORM\Table(name="db1.table1")
*/
class FirstEntity
{
/**
* #ORM\Id
* #ORM\Column(name="id", type="integer")
* #ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
}
Entity class in SecondBundle:
namespace NoiseLabs\SecondBundle\Model;
/**
* #ORM\Entity
* #ORM\Table(name="db2.table2")
*/
class SecondEntity
{
/**
* #ORM\Id
* #ORM\Column(name="id", type="integer")
* #ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* #ORM\ManyToOne(targetEntity="NoiseLabs\FirstBundle\Model\FirstEntity")
* #ORM\JoinColumn(name="firstId", referencedColumnName="id", onDelete="CASCADE")
*/
protected $first;
}
Now, the problem is app/console doctrine:schema:update --dump-sql only detects schema changes in (default connection) db1.tables. If I set the default connection to db2 it will only output sql related to db2.tables.
I've checked with app/console doctrine:mapping:info and all entity classes are being mapped.
Is this a limitation of Doctrine/Symfony or do I need to adjust my configuration? Thanks.
Each entity manager can have only one connection. Split the default entity manager into two. app/console doctrine:schema:update takes an optional argument (em) to specify the entity manager in use. You'd have to run it twice:
app/console doctrine:schema:update --dump-sql em="default"
app/console doctrine:schema:update --dump-sql em="my_second_em"
There's also a short article (How to work with Multiple Entity Managers and Connections) in the Symfony2 cookbook that's worth reading.

Categories