Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@
}
},
"suggest": {
"laravel-doctrine/fluent": "Fluent mapping driver (alternative to xml, yaml, ... (~2.0).",
"fzaninotto/faker": "Required to use the entity factory builder (~1.4).",
"laravel-doctrine/acl": "to integrate Doctrine roles & permissions with Laravel's Authorization system (~1.0)",
"laravel-doctrine/extensions": "to add Behavioral and Query/Type Extensions for Laravel Doctrine (~1.0)",
Expand Down
2 changes: 1 addition & 1 deletion docs/configuration.rst
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ Within the entity manager name array are configuration settings. These are
conditional clauses of queries, regardless the place where the SQL is generated
* ``mapping_types`` - Link a database type to a local Doctrine type
* ``meta`` - The type of metadata configuration. Valid values are
``attributes``, ``xml``, ``simplified_xml``, ``static_php``, ``php``.
``attributes``, ``fluent``, ``xml``, ``simplified_xml``, ``static_php``, ``php``.
The majority of configurations use ``attributes`` or ``xml`` and these
metadata configurations are recommended.
* ``namespaces`` - If your entities are not located in the configured app
Expand Down
65 changes: 65 additions & 0 deletions src/Configuration/MetaData/Fluent.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
<?php

declare(strict_types=1);

namespace LaravelDoctrine\ORM\Configuration\MetaData;

use Doctrine\ORM\Mapping\Builder\ClassMetadataBuilder;
use Doctrine\ORM\Mapping\ClassMetadata;
use Illuminate\Contracts\Container\BindingResolutionException;
use Illuminate\Contracts\Container\Container;
use Illuminate\Support\Arr;
use LaravelDoctrine\Fluent\Builders\Builder;
use LaravelDoctrine\Fluent\Extensions\ExtensibleClassMetadataFactory;
use LaravelDoctrine\Fluent\FluentDriver;
use LaravelDoctrine\ORM\Configuration\LaravelNamingStrategy;

class Fluent extends MetaData
{
public function __construct(protected Container $container)
{
}

/**
* @param mixed[] $settings
*
* @throws BindingResolutionException
*/
public function resolve(array $settings = []): FluentDriver

Check failure on line 28 in src/Configuration/MetaData/Fluent.php

View workflow job for this annotation

GitHub Actions / Static Analysis with PHPStan (8.2)

Method LaravelDoctrine\ORM\Configuration\MetaData\Fluent::resolve() has invalid return type LaravelDoctrine\Fluent\FluentDriver.

Check failure on line 28 in src/Configuration/MetaData/Fluent.php

View workflow job for this annotation

GitHub Actions / Static Analysis with PHPStan (8.3)

Method LaravelDoctrine\ORM\Configuration\MetaData\Fluent::resolve() has invalid return type LaravelDoctrine\Fluent\FluentDriver.
{
$driver = new FluentDriver(Arr::get($settings, 'mappings', []));

Check failure on line 30 in src/Configuration/MetaData/Fluent.php

View workflow job for this annotation

GitHub Actions / Static Analysis with PHPStan (8.2)

Instantiated class LaravelDoctrine\Fluent\FluentDriver not found.

Check failure on line 30 in src/Configuration/MetaData/Fluent.php

View workflow job for this annotation

GitHub Actions / Static Analysis with PHPStan (8.3)

Instantiated class LaravelDoctrine\Fluent\FluentDriver not found.

$namingStrategy = $this->getNamingStrategy($settings);

$driver->setFluentFactory(static function (ClassMetadata $meta) use ($namingStrategy) {
return new Builder(new ClassMetadataBuilder($meta), $namingStrategy);

Check failure on line 35 in src/Configuration/MetaData/Fluent.php

View workflow job for this annotation

GitHub Actions / Static Analysis with PHPStan (8.2)

Instantiated class LaravelDoctrine\Fluent\Builders\Builder not found.

Check failure on line 35 in src/Configuration/MetaData/Fluent.php

View workflow job for this annotation

GitHub Actions / Static Analysis with PHPStan (8.3)

Instantiated class LaravelDoctrine\Fluent\Builders\Builder not found.
});

return $driver;
}

/**
* @param mixed[] $settings
*
* @throws BindingResolutionException
*/
protected function getNamingStrategy(array $settings = []): mixed
{
return $this->container->make(Arr::get($settings, 'naming_strategy', LaravelNamingStrategy::class));
}

/**
* @param mixed[] $settings
*
* @throws BindingResolutionException
*/
protected function getQuoteStrategy(array $settings = []): mixed
{
return $this->container->make(Arr::get($settings, 'quote_strategy'));
}

public function getClassMetadataFactoryName(): string
{
return ExtensibleClassMetadataFactory::class;

Check failure on line 63 in src/Configuration/MetaData/Fluent.php

View workflow job for this annotation

GitHub Actions / Static Analysis with PHPStan (8.2)

Class LaravelDoctrine\Fluent\Extensions\ExtensibleClassMetadataFactory not found.

Check failure on line 63 in src/Configuration/MetaData/Fluent.php

View workflow job for this annotation

GitHub Actions / Static Analysis with PHPStan (8.3)

Class LaravelDoctrine\Fluent\Extensions\ExtensibleClassMetadataFactory not found.
}
}
3 changes: 2 additions & 1 deletion tests/Feature/EntityManagerFactoryTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -918,14 +918,15 @@ protected function mockORMConfiguration(): void
{
$this->configuration = m::mock(Configuration::class);
$this->configuration->shouldReceive('setSQLLogger');
$this->configuration->shouldReceive('isNativeLazyObjectsEnabled');

$this->configuration->shouldReceive('getMetadataDriverImpl')
->andReturn($this->mappingDriver);

$this->configuration->shouldReceive('setMetadataDriverImpl')
->atLeast()->once();
$this->configuration->shouldReceive('setMiddlewares')
->atLeast()->once();
->atLeast()->once();

$this->configuration->shouldReceive('getAutoCommit')
->atLeast()->once()
Expand Down
Loading