假设我有一个名为 User 的实体:
class User implements UserInterface
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\Column(type="string", length=255, nullable=false)
*/
private $username;
/**
* @ORM\OneToOne(targetEntity="App\Entity\Address", cascade={"persist", "remove"})
* @ORM\JoinColumn(nullable=false)
*/
private $address;
Run Code Online (Sandbox Code Playgroud)
地址字段与地址实体是一对一的关系:
class Address
{
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\Column(type="string", length=255)
*/
private $street;
/**
* @ORM\Column(type="string", length=255)
*/
private $name;
Run Code Online (Sandbox Code Playgroud)
我有一个用于更新用户及其地址的控制器:
...
public function putUserSelf(Request $request)
{
$em = $this->getDoctrine()->getManager();
$user = $this->getUser();
$encoders = array(new JsonEncoder()); …Run Code Online (Sandbox Code Playgroud) 我有一个包含实体的数据库,如下所示:
1. User entity
2. Event entity (musical concert etc.)
3. Ticket entity
3. Notification entity
Run Code Online (Sandbox Code Playgroud)
我一直在思考三种可能的解决方案:
a) 通知实体具有以下结构:
id serial PRIMARY KEY,
.
.
ticketId integer REFERENCES tickets(id),
eventId integer REFERENCES events(id))
userId integer REFERENCES users(id) // this is present in all three solutions;
Run Code Online (Sandbox Code Playgroud)
这样,Notification 实体就拥有两个外键,但一次只填充其中一个(eventId 或 TicketId),另一个永远为空。
b) 通知实体仅具有与通知本身相关的列,它不包含任何外键(userId 除外)。
关系被提取到另外两个具有此结构的关系映射表中(对于通知-工单关系,同样适用于通知-事件,除了外键引用事件):
id serial PRIMARY KEY,
notificationId integer REFERENCES notifications(id),
ticketId integer REFERENCES tickets(id));
Run Code Online (Sandbox Code Playgroud)
这样,我们创建了类似接口的东西,并且不让通知实体知道任何有关关系的信息(它只有与通知本身和 userId 相关的属性),并且我们还有两个映射关系的附加表。
c) 将Notification实体分成两个不同的实体
(TicketNotification、EventNotification),每个实体具有相同的属性,但外键列不同。
- TicketNotification - …Run Code Online (Sandbox Code Playgroud) 我使用 Api 平台 & Symfony (5.4) + php 7.2.5
我自己创建了一个实体,我只是在 /src/Entity 中添加了一个文件,但它不起作用。
我刷新,清除缓存,添加@ApiResource...但是实体在API平台的文档页面中不可见。
你知道错误出在哪里吗?谢谢 !
这是我用于新实体的代码:
// api/src/Entity/Review.php
namespace App\Entity;
use ApiPlatform\Core\Annotation\ApiResource;
/** A review of a book. */
/**
* @ApiResource()
*/
class Review
{
/** The id of this review. */
private ?int $id = null;
/** The rating of this review (between 0 and 5). */
public int $rating = 0;
/** The body of the review. */
public string $body = '';
/** The author of …Run Code Online (Sandbox Code Playgroud) 您好,我在尝试使用以下代码创建大量产品评论时遇到内存泄漏:
echo "Start: " . memory_get_usage();
foreach ($reviews['items'] as $review) {
$newReview = $this->handleReviewData($review, $languages, $salesChannels, $context);
if ($newReview) {
$reviewsToImport[] = $newReview;
}
echo "End: " . memory_get_usage();
}
$this->productReviewRepository->create($reviewsToImport, $context);
Run Code Online (Sandbox Code Playgroud)
我正在$this->productReviewRepositoryinside上运行多个查询$this->handleReviewData。所以我猜测以某种方式造成了泄漏,但我找不到 or ->flush()(->clear($entity)因为它不是 Symfony)。有任何想法吗?
它为每次迭代添加+-1000000 bytes( 1mb) 内存。
处理评论数据函数:
public function handleReviewData($review, $languages, $salesChannels, $context): ?array
{
$reviewLocaleCode = $review['questionnaire']['locale'];
$productSku = $review['product']['sku'];
$salesChannels = $salesChannels->filter(static function ($salesChannel) use ($review) {
/* @var $salesChannel TrustApiEntity */
return $salesChannel->getChannelId() …Run Code Online (Sandbox Code Playgroud) 在 Symfony 5.4 之前,我曾经这样引用我的实体
public function findAction($archived = false)
{
$em = $this->getDoctrine()->getManager();
$analyses = $em->getRepository('App:Hazardlog\Analysis')->findAll();
Run Code Online (Sandbox Code Playgroud)
我记得不久前有一个以 ::class 结尾的新语法(可能已经在 symfony 4 中),但我一直坚持这种语法,因为我将我的实体组织到子文件夹中(这是旧时代的残余) src 中的代码应该驻留在一堆包中......)。
然而,现在我得到的只是一个简洁的错误:
类“Analysis::class”不存在
这是我的目录结构
Entity
Hazardlog
Analysis
Risk
Run Code Online (Sandbox Code Playgroud)
现在,我尝试了多种方法来在末尾使用 ::class 引用我的实体,但似乎都不起作用。
我可以不将我的目录保留在 symfony 5.4 中吗?还是有一种我没有找到的方法?
我试过了
$analyses = $em->getRepository('App:Hazardlog\Analysis::class')->findAll();
Run Code Online (Sandbox Code Playgroud)
也尝试过
$analyses = $em->getRepository('Hazardlog\Analysis::class')->findAll();
Run Code Online (Sandbox Code Playgroud)
也
$analyses = $em->getRepository('Analysis::class')->findAll();
Run Code Online (Sandbox Code Playgroud)
(我知道最后一个是一个远景,但由于应用程序中只有一个 Analysis 实体,并且 symfony 设置为新语法,我认为 symfony 可能足够聪明,无论如何都能找到它)
这里有什么提示给我吗?
- - - - - - - - - 更新 - - - - - - - -
从 Cerad 的评论中我学到了一些行不通的方法
$analyses …Run Code Online (Sandbox Code Playgroud) 我正在开发一个 spring-boot 应用程序。我有一个名为 Message 的实体类,我想使用 Spring 验证对其进行验证。我需要验证的字段之一是 LocalDateTime,它不得早于当前日期 6 天。我的实体类如下所示:
@Entity
@EntityListeners(AuditingEntityListener.class)
public class Message implements Validator {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id", length = 100, nullable = false, unique = true)
private long id;
@Column(name = "start", length = 20, nullable = true)
private LocalDateTime start;
public Message() {}
@Override
public boolean supports(@NotNull Class<?> clazz) {
return Message.class.equals(clazz);
}
@Override
public void validate(Object target, Errors errors) {
Message m = (Message) target;
if(m.getStart() != null && m.getStart().isBefore(LocalDateTime.now(clock).minusDays(6))) …Run Code Online (Sandbox Code Playgroud) 有人可以帮助我理解如何定义一个与自身有关系的JPA映射实体?
例如,我的实体是CompanyDivision,divisionA包含divisionB,divisionC和divisionB包含divisionB1,divisionB2
谢谢!
我有一个XML文档,其中包含特殊字符,如'%',回车符,换行符,&,<,>,',".我试图对整个xml文档进行编码,但在使用xmldocument.load方法时无法加载在C#中.
删除这些特殊字符的最佳方法是什么,而不必硬编码以用相应的实体引用替换非法字符?
我正在开发一个MVC应用程序,我在开发它时使用了EF 4.0.我已经从模型中创建了类.现在,我想为MVC创建的每个类添加更多类.
恩.在下面的代码中,我得到了类Location.现在,我想再创建一个类(Partial class)如何覆盖分部类中的属性?
怎么做 ?
namespace Entities
{
public partial class Location
{
public int Id { get; set; }
public string Name { get; set; }
public string Remark { get; set; }
public string State { get; set; }
public string Region { get; set; }
public string PinCode { get; set; }
public virtual ICollection<Comment> Comments { get; set; }
}
}
Run Code Online (Sandbox Code Playgroud) 我不知道我错过了什么,但我一直在与Twig战斗,无法找出我误解的地方.
我有三个实体:Product,ProductImage和Category
每个产品作为一个类别和一个类别有许多产品.每个产品都有很多图片.
我能够列出图像集,这不是问题.
问题是我无法获取Twig模板文件中每个产品的类别描述(product.categories.description),原样如下:
{% extends '::base.html.twig' %}
{% block body %}
<div id="vitrines">
{{ debug products }}
{% for product in products %}
<div class="boxVitrine">
{% for image in product.images %}
{% if(image.oneOfType == 'thumb') %}
<img src="{{ asset('bundles/artevitrinesite/products/') }}{{ image.filename }}" />
{% endif %}
{% endfor %}
<div class="info">
<div class="container">
<div class="top">
<div class="code">
Cod: <span class="red1"><strong>{{ product.code }}</strong></span>
<br />{{ product.categories.description }}
</div>
<div class="price">{{ product.price | bigprice | raw }}</div>
</div> …Run Code Online (Sandbox Code Playgroud)