mirror of
https://github.com/Part-DB/Part-DB-server.git
synced 2025-06-22 18:03:37 +02:00
Do the doctrine definitions of the master preview attachment in the sub classes
This makes lazy fetching works and saves some db queries.
This commit is contained in:
parent
2c6de84c9a
commit
2ddfe48aba
14 changed files with 73 additions and 6 deletions
|
@ -63,6 +63,10 @@ class AttachmentType extends AbstractStructuralDBElement
|
||||||
#[ORM\OrderBy(['name' => 'ASC'])]
|
#[ORM\OrderBy(['name' => 'ASC'])]
|
||||||
protected Collection $attachments;
|
protected Collection $attachments;
|
||||||
|
|
||||||
|
#[ORM\OneToOne(targetEntity: AttachmentTypeAttachment::class)]
|
||||||
|
#[ORM\JoinColumn(name: 'id_preview_attachment', onDelete: 'SET NULL')]
|
||||||
|
protected ?Attachment $master_picture_attachment = null;
|
||||||
|
|
||||||
/** @var Collection<int, AttachmentTypeParameter>
|
/** @var Collection<int, AttachmentTypeParameter>
|
||||||
*/
|
*/
|
||||||
#[Assert\Valid]
|
#[Assert\Valid]
|
||||||
|
@ -70,9 +74,6 @@ class AttachmentType extends AbstractStructuralDBElement
|
||||||
#[ORM\OrderBy(['group' => 'ASC', 'name' => 'ASC'])]
|
#[ORM\OrderBy(['group' => 'ASC', 'name' => 'ASC'])]
|
||||||
protected Collection $parameters;
|
protected Collection $parameters;
|
||||||
|
|
||||||
/**
|
|
||||||
* @var Collection<Attachment>
|
|
||||||
*/
|
|
||||||
/**
|
/**
|
||||||
* @var Collection<Attachment>
|
* @var Collection<Attachment>
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -33,10 +33,10 @@ trait MasterAttachmentTrait
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* @var Attachment|null
|
* @var Attachment|null
|
||||||
|
* Mapping is done in the subclasses (e.g. Part), like with the attachments.
|
||||||
|
* If this is done here (which is possible in theory), the attachment is not lazy loaded anymore, which causes unnecessary overhead.
|
||||||
*/
|
*/
|
||||||
#[Assert\Expression('value == null or value.isPicture()', message: 'part.master_attachment.must_be_picture')]
|
#[Assert\Expression('value == null or value.isPicture()', message: 'part.master_attachment.must_be_picture')]
|
||||||
#[ORM\ManyToOne(targetEntity: Attachment::class)]
|
|
||||||
#[ORM\JoinColumn(name: 'id_preview_attachment', onDelete: 'SET NULL')]
|
|
||||||
protected ?Attachment $master_picture_attachment = null;
|
protected ?Attachment $master_picture_attachment = null;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -41,6 +41,8 @@ declare(strict_types=1);
|
||||||
|
|
||||||
namespace App\Entity\LabelSystem;
|
namespace App\Entity\LabelSystem;
|
||||||
|
|
||||||
|
use App\Entity\Attachments\Attachment;
|
||||||
|
use App\Entity\Attachments\AttachmentTypeAttachment;
|
||||||
use App\Repository\LabelProfileRepository;
|
use App\Repository\LabelProfileRepository;
|
||||||
use App\EntityListeners\TreeCacheInvalidationListener;
|
use App\EntityListeners\TreeCacheInvalidationListener;
|
||||||
use Doctrine\DBAL\Types\Types;
|
use Doctrine\DBAL\Types\Types;
|
||||||
|
@ -68,6 +70,10 @@ class LabelProfile extends AttachmentContainingDBElement
|
||||||
#[ORM\OrderBy(['name' => 'ASC'])]
|
#[ORM\OrderBy(['name' => 'ASC'])]
|
||||||
protected Collection $attachments;
|
protected Collection $attachments;
|
||||||
|
|
||||||
|
#[ORM\OneToOne(targetEntity: AttachmentTypeAttachment::class)]
|
||||||
|
#[ORM\JoinColumn(name: 'id_preview_attachment', onDelete: 'SET NULL')]
|
||||||
|
protected ?Attachment $master_picture_attachment = null;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var LabelOptions
|
* @var LabelOptions
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -22,6 +22,8 @@ declare(strict_types=1);
|
||||||
|
|
||||||
namespace App\Entity\Parts;
|
namespace App\Entity\Parts;
|
||||||
|
|
||||||
|
use App\Entity\Attachments\Attachment;
|
||||||
|
use App\Entity\Attachments\AttachmentTypeAttachment;
|
||||||
use App\Repository\Parts\CategoryRepository;
|
use App\Repository\Parts\CategoryRepository;
|
||||||
use Doctrine\DBAL\Types\Types;
|
use Doctrine\DBAL\Types\Types;
|
||||||
use Doctrine\Common\Collections\ArrayCollection;
|
use Doctrine\Common\Collections\ArrayCollection;
|
||||||
|
@ -118,6 +120,10 @@ class Category extends AbstractPartsContainingDBElement
|
||||||
#[ORM\OrderBy(['name' => 'ASC'])]
|
#[ORM\OrderBy(['name' => 'ASC'])]
|
||||||
protected Collection $attachments;
|
protected Collection $attachments;
|
||||||
|
|
||||||
|
#[ORM\OneToOne(targetEntity: CategoryAttachment::class)]
|
||||||
|
#[ORM\JoinColumn(name: 'id_preview_attachment', onDelete: 'SET NULL')]
|
||||||
|
protected ?Attachment $master_picture_attachment = null;
|
||||||
|
|
||||||
/** @var Collection<int, CategoryParameter>
|
/** @var Collection<int, CategoryParameter>
|
||||||
*/
|
*/
|
||||||
#[Assert\Valid]
|
#[Assert\Valid]
|
||||||
|
|
|
@ -22,6 +22,8 @@ declare(strict_types=1);
|
||||||
|
|
||||||
namespace App\Entity\Parts;
|
namespace App\Entity\Parts;
|
||||||
|
|
||||||
|
use App\Entity\Attachments\Attachment;
|
||||||
|
use App\Entity\Attachments\AttachmentTypeAttachment;
|
||||||
use App\Repository\Parts\FootprintRepository;
|
use App\Repository\Parts\FootprintRepository;
|
||||||
use App\Entity\Base\AbstractStructuralDBElement;
|
use App\Entity\Base\AbstractStructuralDBElement;
|
||||||
use Doctrine\Common\Collections\ArrayCollection;
|
use Doctrine\Common\Collections\ArrayCollection;
|
||||||
|
@ -59,6 +61,10 @@ class Footprint extends AbstractPartsContainingDBElement
|
||||||
#[ORM\OrderBy(['name' => 'ASC'])]
|
#[ORM\OrderBy(['name' => 'ASC'])]
|
||||||
protected Collection $attachments;
|
protected Collection $attachments;
|
||||||
|
|
||||||
|
#[ORM\OneToOne(targetEntity: FootprintAttachment::class)]
|
||||||
|
#[ORM\JoinColumn(name: 'id_preview_attachment', onDelete: 'SET NULL')]
|
||||||
|
protected ?Attachment $master_picture_attachment = null;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var FootprintAttachment|null
|
* @var FootprintAttachment|null
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -22,6 +22,8 @@ declare(strict_types=1);
|
||||||
|
|
||||||
namespace App\Entity\Parts;
|
namespace App\Entity\Parts;
|
||||||
|
|
||||||
|
use App\Entity\Attachments\Attachment;
|
||||||
|
use App\Entity\Attachments\AttachmentTypeAttachment;
|
||||||
use App\Repository\Parts\ManufacturerRepository;
|
use App\Repository\Parts\ManufacturerRepository;
|
||||||
use App\Entity\Base\AbstractStructuralDBElement;
|
use App\Entity\Base\AbstractStructuralDBElement;
|
||||||
use Doctrine\Common\Collections\ArrayCollection;
|
use Doctrine\Common\Collections\ArrayCollection;
|
||||||
|
@ -59,6 +61,10 @@ class Manufacturer extends AbstractCompany
|
||||||
#[ORM\OrderBy(['name' => 'ASC'])]
|
#[ORM\OrderBy(['name' => 'ASC'])]
|
||||||
protected Collection $attachments;
|
protected Collection $attachments;
|
||||||
|
|
||||||
|
#[ORM\OneToOne(targetEntity: ManufacturerAttachment::class)]
|
||||||
|
#[ORM\JoinColumn(name: 'id_preview_attachment', onDelete: 'SET NULL')]
|
||||||
|
protected ?Attachment $master_picture_attachment = null;
|
||||||
|
|
||||||
/** @var Collection<int, ManufacturerParameter>
|
/** @var Collection<int, ManufacturerParameter>
|
||||||
*/
|
*/
|
||||||
#[Assert\Valid]
|
#[Assert\Valid]
|
||||||
|
|
|
@ -22,6 +22,8 @@ declare(strict_types=1);
|
||||||
|
|
||||||
namespace App\Entity\Parts;
|
namespace App\Entity\Parts;
|
||||||
|
|
||||||
|
use App\Entity\Attachments\Attachment;
|
||||||
|
use App\Entity\Attachments\AttachmentTypeAttachment;
|
||||||
use App\Repository\Parts\MeasurementUnitRepository;
|
use App\Repository\Parts\MeasurementUnitRepository;
|
||||||
use Doctrine\DBAL\Types\Types;
|
use Doctrine\DBAL\Types\Types;
|
||||||
use App\Entity\Base\AbstractStructuralDBElement;
|
use App\Entity\Base\AbstractStructuralDBElement;
|
||||||
|
@ -90,6 +92,10 @@ class MeasurementUnit extends AbstractPartsContainingDBElement
|
||||||
#[ORM\OrderBy(['name' => 'ASC'])]
|
#[ORM\OrderBy(['name' => 'ASC'])]
|
||||||
protected Collection $attachments;
|
protected Collection $attachments;
|
||||||
|
|
||||||
|
#[ORM\OneToOne(targetEntity: MeasurementUnitAttachment::class)]
|
||||||
|
#[ORM\JoinColumn(name: 'id_preview_attachment', onDelete: 'SET NULL')]
|
||||||
|
protected ?Attachment $master_picture_attachment = null;
|
||||||
|
|
||||||
/** @var Collection<int, MeasurementUnitParameter>
|
/** @var Collection<int, MeasurementUnitParameter>
|
||||||
*/
|
*/
|
||||||
#[Assert\Valid]
|
#[Assert\Valid]
|
||||||
|
|
|
@ -22,6 +22,7 @@ declare(strict_types=1);
|
||||||
|
|
||||||
namespace App\Entity\Parts;
|
namespace App\Entity\Parts;
|
||||||
|
|
||||||
|
use App\Entity\Attachments\AttachmentTypeAttachment;
|
||||||
use App\Repository\PartRepository;
|
use App\Repository\PartRepository;
|
||||||
use Doctrine\DBAL\Types\Types;
|
use Doctrine\DBAL\Types\Types;
|
||||||
use App\Entity\Attachments\Attachment;
|
use App\Entity\Attachments\Attachment;
|
||||||
|
@ -102,7 +103,7 @@ class Part extends AttachmentContainingDBElement
|
||||||
* @var Attachment|null
|
* @var Attachment|null
|
||||||
*/
|
*/
|
||||||
#[Assert\Expression('value == null or value.isPicture()', message: 'part.master_attachment.must_be_picture')]
|
#[Assert\Expression('value == null or value.isPicture()', message: 'part.master_attachment.must_be_picture')]
|
||||||
#[ORM\ManyToOne(targetEntity: Attachment::class)]
|
#[ORM\ManyToOne(targetEntity: PartAttachment::class)]
|
||||||
#[ORM\JoinColumn(name: 'id_preview_attachment', onDelete: 'SET NULL')]
|
#[ORM\JoinColumn(name: 'id_preview_attachment', onDelete: 'SET NULL')]
|
||||||
protected ?Attachment $master_picture_attachment = null;
|
protected ?Attachment $master_picture_attachment = null;
|
||||||
|
|
||||||
|
|
|
@ -22,6 +22,7 @@ declare(strict_types=1);
|
||||||
|
|
||||||
namespace App\Entity\Parts;
|
namespace App\Entity\Parts;
|
||||||
|
|
||||||
|
use App\Entity\Attachments\Attachment;
|
||||||
use App\Repository\Parts\StorelocationRepository;
|
use App\Repository\Parts\StorelocationRepository;
|
||||||
use Doctrine\DBAL\Types\Types;
|
use Doctrine\DBAL\Types\Types;
|
||||||
use Doctrine\Common\Collections\ArrayCollection;
|
use Doctrine\Common\Collections\ArrayCollection;
|
||||||
|
@ -109,6 +110,10 @@ class Storelocation extends AbstractPartsContainingDBElement
|
||||||
#[ORM\OneToMany(targetEntity: StorelocationAttachment::class, mappedBy: 'element', cascade: ['persist', 'remove'], orphanRemoval: true)]
|
#[ORM\OneToMany(targetEntity: StorelocationAttachment::class, mappedBy: 'element', cascade: ['persist', 'remove'], orphanRemoval: true)]
|
||||||
protected Collection $attachments;
|
protected Collection $attachments;
|
||||||
|
|
||||||
|
#[ORM\OneToOne(targetEntity: StorelocationAttachment::class)]
|
||||||
|
#[ORM\JoinColumn(name: 'id_preview_attachment', onDelete: 'SET NULL')]
|
||||||
|
protected ?Attachment $master_picture_attachment = null;
|
||||||
|
|
||||||
/********************************************************************************
|
/********************************************************************************
|
||||||
*
|
*
|
||||||
* Getters
|
* Getters
|
||||||
|
|
|
@ -22,6 +22,8 @@ declare(strict_types=1);
|
||||||
|
|
||||||
namespace App\Entity\Parts;
|
namespace App\Entity\Parts;
|
||||||
|
|
||||||
|
use App\Entity\Attachments\Attachment;
|
||||||
|
use App\Entity\Attachments\AttachmentTypeAttachment;
|
||||||
use App\Repository\Parts\SupplierRepository;
|
use App\Repository\Parts\SupplierRepository;
|
||||||
use App\Entity\PriceInformations\Orderdetail;
|
use App\Entity\PriceInformations\Orderdetail;
|
||||||
use Doctrine\Common\Collections\ArrayCollection;
|
use Doctrine\Common\Collections\ArrayCollection;
|
||||||
|
@ -91,6 +93,10 @@ class Supplier extends AbstractCompany
|
||||||
#[ORM\OrderBy(['name' => 'ASC'])]
|
#[ORM\OrderBy(['name' => 'ASC'])]
|
||||||
protected Collection $attachments;
|
protected Collection $attachments;
|
||||||
|
|
||||||
|
#[ORM\OneToOne(targetEntity: SupplierAttachment::class)]
|
||||||
|
#[ORM\JoinColumn(name: 'id_preview_attachment', onDelete: 'SET NULL')]
|
||||||
|
protected ?Attachment $master_picture_attachment = null;
|
||||||
|
|
||||||
/** @var Collection<int, SupplierParameter>
|
/** @var Collection<int, SupplierParameter>
|
||||||
*/
|
*/
|
||||||
#[Assert\Valid]
|
#[Assert\Valid]
|
||||||
|
|
|
@ -22,6 +22,8 @@ declare(strict_types=1);
|
||||||
|
|
||||||
namespace App\Entity\PriceInformations;
|
namespace App\Entity\PriceInformations;
|
||||||
|
|
||||||
|
use App\Entity\Attachments\Attachment;
|
||||||
|
use App\Entity\Attachments\AttachmentTypeAttachment;
|
||||||
use App\Repository\CurrencyRepository;
|
use App\Repository\CurrencyRepository;
|
||||||
use Doctrine\DBAL\Types\Types;
|
use Doctrine\DBAL\Types\Types;
|
||||||
use App\Entity\Attachments\CurrencyAttachment;
|
use App\Entity\Attachments\CurrencyAttachment;
|
||||||
|
@ -84,6 +86,10 @@ class Currency extends AbstractStructuralDBElement
|
||||||
#[ORM\OrderBy(['name' => 'ASC'])]
|
#[ORM\OrderBy(['name' => 'ASC'])]
|
||||||
protected Collection $attachments;
|
protected Collection $attachments;
|
||||||
|
|
||||||
|
#[ORM\OneToOne(targetEntity: CurrencyAttachment::class)]
|
||||||
|
#[ORM\JoinColumn(name: 'id_preview_attachment', onDelete: 'SET NULL')]
|
||||||
|
protected ?Attachment $master_picture_attachment = null;
|
||||||
|
|
||||||
/** @var Collection<int, CurrencyParameter>
|
/** @var Collection<int, CurrencyParameter>
|
||||||
*/
|
*/
|
||||||
#[Assert\Valid]
|
#[Assert\Valid]
|
||||||
|
|
|
@ -22,6 +22,8 @@ declare(strict_types=1);
|
||||||
|
|
||||||
namespace App\Entity\ProjectSystem;
|
namespace App\Entity\ProjectSystem;
|
||||||
|
|
||||||
|
use App\Entity\Attachments\Attachment;
|
||||||
|
use App\Entity\Attachments\AttachmentTypeAttachment;
|
||||||
use App\Repository\Parts\DeviceRepository;
|
use App\Repository\Parts\DeviceRepository;
|
||||||
use App\Validator\Constraints\UniqueObjectCollection;
|
use App\Validator\Constraints\UniqueObjectCollection;
|
||||||
use Doctrine\DBAL\Types\Types;
|
use Doctrine\DBAL\Types\Types;
|
||||||
|
@ -93,6 +95,10 @@ class Project extends AbstractStructuralDBElement
|
||||||
#[ORM\OrderBy(['name' => 'ASC'])]
|
#[ORM\OrderBy(['name' => 'ASC'])]
|
||||||
protected Collection $attachments;
|
protected Collection $attachments;
|
||||||
|
|
||||||
|
#[ORM\OneToOne(targetEntity: ProjectAttachment::class)]
|
||||||
|
#[ORM\JoinColumn(name: 'id_preview_attachment', onDelete: 'SET NULL')]
|
||||||
|
protected ?Attachment $master_picture_attachment = null;
|
||||||
|
|
||||||
/** @var Collection<int, ProjectParameter>
|
/** @var Collection<int, ProjectParameter>
|
||||||
*/
|
*/
|
||||||
#[ORM\OneToMany(targetEntity: ProjectParameter::class, mappedBy: 'element', cascade: ['persist', 'remove'], orphanRemoval: true)]
|
#[ORM\OneToMany(targetEntity: ProjectParameter::class, mappedBy: 'element', cascade: ['persist', 'remove'], orphanRemoval: true)]
|
||||||
|
|
|
@ -22,6 +22,8 @@ declare(strict_types=1);
|
||||||
|
|
||||||
namespace App\Entity\UserSystem;
|
namespace App\Entity\UserSystem;
|
||||||
|
|
||||||
|
use App\Entity\Attachments\Attachment;
|
||||||
|
use App\Entity\Attachments\AttachmentTypeAttachment;
|
||||||
use App\Validator\Constraints\NoLockout;
|
use App\Validator\Constraints\NoLockout;
|
||||||
use Doctrine\DBAL\Types\Types;
|
use Doctrine\DBAL\Types\Types;
|
||||||
use App\Entity\Attachments\GroupAttachment;
|
use App\Entity\Attachments\GroupAttachment;
|
||||||
|
@ -76,6 +78,10 @@ class Group extends AbstractStructuralDBElement implements HasPermissionsInterfa
|
||||||
#[ORM\OrderBy(['name' => 'ASC'])]
|
#[ORM\OrderBy(['name' => 'ASC'])]
|
||||||
protected Collection $attachments;
|
protected Collection $attachments;
|
||||||
|
|
||||||
|
#[ORM\OneToOne(targetEntity: GroupAttachment::class)]
|
||||||
|
#[ORM\JoinColumn(name: 'id_preview_attachment', onDelete: 'SET NULL')]
|
||||||
|
protected ?Attachment $master_picture_attachment = null;
|
||||||
|
|
||||||
#[Groups(['full'])]
|
#[Groups(['full'])]
|
||||||
#[ORM\Embedded(class: PermissionData::class, columnPrefix: 'permissions_')]
|
#[ORM\Embedded(class: PermissionData::class, columnPrefix: 'permissions_')]
|
||||||
#[ValidPermission()]
|
#[ValidPermission()]
|
||||||
|
|
|
@ -22,6 +22,8 @@ declare(strict_types=1);
|
||||||
|
|
||||||
namespace App\Entity\UserSystem;
|
namespace App\Entity\UserSystem;
|
||||||
|
|
||||||
|
use App\Entity\Attachments\Attachment;
|
||||||
|
use App\Entity\Attachments\AttachmentTypeAttachment;
|
||||||
use App\Repository\UserRepository;
|
use App\Repository\UserRepository;
|
||||||
use App\EntityListeners\TreeCacheInvalidationListener;
|
use App\EntityListeners\TreeCacheInvalidationListener;
|
||||||
use App\Validator\Constraints\NoLockout;
|
use App\Validator\Constraints\NoLockout;
|
||||||
|
@ -226,6 +228,10 @@ class User extends AttachmentContainingDBElement implements UserInterface, HasPe
|
||||||
#[ORM\OrderBy(['name' => 'ASC'])]
|
#[ORM\OrderBy(['name' => 'ASC'])]
|
||||||
protected Collection $attachments;
|
protected Collection $attachments;
|
||||||
|
|
||||||
|
#[ORM\OneToOne(targetEntity: UserAttachment::class)]
|
||||||
|
#[ORM\JoinColumn(name: 'id_preview_attachment', onDelete: 'SET NULL')]
|
||||||
|
protected ?Attachment $master_picture_attachment = null;
|
||||||
|
|
||||||
/** @var \DateTimeInterface|null The time when the backup codes were generated
|
/** @var \DateTimeInterface|null The time when the backup codes were generated
|
||||||
*/
|
*/
|
||||||
#[Groups(['full'])]
|
#[Groups(['full'])]
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue