Symfony - 用另一个实体的 id 重载实体集函数

Posted

技术标签:

【中文标题】Symfony - 用另一个实体的 id 重载实体集函数【英文标题】:Symfony - Overloading an Entity set function with an id of another entity 【发布时间】:2021-03-26 10:21:28 【问题描述】:

根据另一个实体的字段重载一个实体的集合函数是否可行。

我在表 1(E 列)中有一个字段,该字段由 C 列或 D 列组成(如果有 2 个字段具有相同的字段,但它会在另一个时间出现,我只是试着让它工作)。 字段 E 将取决于另一个表 (2)。

示例:如果在表 2 中,字段“crit1”或“crit2”是“本地化”,在表 1 中,“tri_id”列(F 列)将取 D 列的值,否则取 E 列的值。

这些表的结构示例

=> adapte_gaucher 的意思是“左手改编”

我在我的实体中这样做:

/**
 * @param int $triId
 */
public function setTriId(int $shopId, int $triId): void

    $entityManager = $this->getDoctrine()->getManager();
    $products = $this->getDoctrine()
        ->getRepository(Table1::class)
        ->find($shopId)
 
    if(Table1->crit1 != "localisation" || Table1->crit2 != "localisation" ) 
        $triId = $this->tri21 ;
   else 
    $triId = $this->tri12 ;

    $this->triId = $triId;
    $entityManager->persist($triId);
    $entityManager->flush();

这会是一个好的解决方案吗?我太新了,不知道这是否是一个好方法,或者我是否不应该这样做。 这是我的实习项目(我只是一名大三学生,在我身后只进行了一年的编程,没有任何框架课程)。 对不起,“悲怆”的台词,但它真的会帮助我成功。

还是谢谢。

【问题讨论】:

最好将所有逻辑移至控制器并保持设置器简单 同意我会避免将业务逻辑放入实体中 问题是控制器被调用一次只是为了返回一个json文件并且永远不会被调用。 【参考方案1】:

虽然“IF”的想法并不明智,但我想尝试一个简单的连接,但是:

public function setTri12()

    $this->tri12 = $shop_id . $pack_id . $adapte_gaucher_id;
    return $this;

或:

public function setTri12()

    $this->tri12 = $this->shop_id . $this->pack_id . $this->adapte_gaucher_id;
    return $this;

两者都返回一个空值,因为这 3 个值都是空的。

我可以强制吗? 谢谢

【讨论】:

以上是关于Symfony - 用另一个实体的 id 重载实体集函数的主要内容,如果未能解决你的问题,请参考以下文章

Symfony 表单 - EntityType 通过实体 ID 选择选项

@ORM\Id 不会为 symfony 中的实体创建标识符

Symfony2与列的实体关系

实体的 Symfony 学说问题 [重复]

Symfony 2 实体连接或学说查询连接

Symfony2 实体中除 id 以外的字段的关联在表单中未正确显示