我需要在 Symfony 实体中创建这个数据库方案:
A 类:
B 类:
C 类:
类(class):
我需要在类(class)实体(使用 class_id)与其他实体(ClassA、ClassB、ClassC)(使用 id)和使用 class_type(A、B、C)之间创建关系。
类(class)不是类(class),类(class)也不是类(class)。这里没有继承。在我的项目中,我使用了这个概念(id 和 type 来映射不同的实体)。所以我需要用一个像这样的简单例子来解决这个问题
我想在这里使用@ORM\DiscriminationMap:
/**
* Course
*
* @ORM\Table(name="Course")
* @ORM\InheritanceType("SINGLE_TABLE")
* @ORM\DiscriminatorColumn(name="course_type", type="string")
* @ORM\DiscriminatorMap({"A" = "ClassA", "B" = "ClassB", "C" = "ClassC"})
*/
abstract class Course
{
//...
}
class ClassA extends Course
{
//...
}
class ClassB extends Course
{
//...
}
class ClassC extends Course
{
//...
}
或者类似这样的东西。
但我不想在 ClassA、ClassB、ClassC 实体中复制 Course 的属性,因为“扩展”会将父实体的属性复制到子实体。
这与继承无关。我需要保留上述数据库方案,而不添加来自其他实体的任何附加属性。
谢谢
最佳答案
下一个可能是解决方案:
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
* @ORM\Table(name="class")
* @ORM\InheritanceType("JOINED")
* @ORM\DiscriminatorColumn(name="type", type="string", length=20)
* @ORM\MappedSuperclass
* @ORM\DiscriminatorMap({
* "class_a" = "ClassA",
* "class_b" = "ClassB",
* "class_c" = "ClassC"
* })
*/
abstract class AbstractClass
{
... common fields
/**
* @var PersistentCollection
*
* @ORM\OneToMany(targetEntity="Course", cascade={"persist"}, mappedBy="course")
*/
protected $courses;
}
/**
* @Entity
* @ORM\Table(name="class_a")
*/
class ClassA extends AbstractClass
{
//...
}
/**
* @Entity
* @ORM\Table(name="class_b")
*/
class ClassB extends AbstractClass
{
//...
}
/**
* @Entity
* @ORM\Table(name="class_c")
*/
class ClassC extends AbstractClass
{
//...
}
/**
* @Entity
* @ORM\Table(name="course")
*/
class Course
{
/**
* @var AbstractClass
* @ORM\ManyToOne(targetEntity="AbstractClass", inversedBy="course")
* @ORM\JoinColumn(onDelete="CASCADE")
*/
private $course;
....
}
所以现在你的所有classes都有一个表,与course有一对多的关系(这只是一个例子,你可以使用一对多或多对多,取决于您的需求)。
在 DQL 中,您可以找出哪个类与 INSTANCE OF 一起使用.
关于php - 与 Doctrine Symfony 的条件关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44862894/
我有一个用户工厂。我希望默认情况下确认用户。但是鉴于unconfirmed特征,我不希望它们被确认。虽然我有一个基于实现细节而不是抽象的工作实现,但我想知道如何正确地做到这一点。factory:userdoafter(:create)do|user,evaluator|#unwantedimplementationdetailshereunlessFactoryGirl.factories[:user].defined_traits.map(&:name).include?(:unconfirmed)user.confirm!endendtrait:unconfirmeddoenden
我有一些代码在几个不同的位置之一运行:作为具有调试输出的命令行工具,作为不接受任何输出的更大程序的一部分,以及在Rails环境中。有时我需要根据代码的位置对代码进行细微的更改,我意识到以下样式似乎可行:print"Testingnestedfunctionsdefined\n"CLI=trueifCLIdeftest_printprint"CommandLineVersion\n"endelsedeftest_printprint"ReleaseVersion\n"endendtest_print()这导致:TestingnestedfunctionsdefinedCommandLin
我有一个只接受一个参数的方法:defmy_method(number)end如果使用number调用方法,我该如何引发错误??通常,我如何定义方法参数的条件?比如我想在调用的时候报错:my_method(1) 最佳答案 您可以添加guard在函数的开头,如果参数无效则引发异常。例如:defmy_method(number)failArgumentError,"Inputshouldbegreaterthanorequalto2"ifnumbereputse.messageend#=>Inputshouldbegreaterthano
我的问题的一个例子是体育游戏。一场体育比赛有两支球队,一支主队和一支客队。我的事件记录模型如下:classTeam"Team"has_one:away_team,:class_name=>"Team"end我希望能够通过游戏访问一个团队,例如:Game.find(1).home_team但我收到一个单元化常量错误:Game::team。谁能告诉我我做错了什么?谢谢, 最佳答案 如果Gamehas_one:team那么Rails假设您的teams表有一个game_id列。不过,您想要的是games表有一个team_id列,在这种情况下
📢博客主页:https://blog.csdn.net/weixin_43197380📢欢迎点赞👍收藏⭐留言📝如有错误敬请指正!📢本文由Loewen丶原创,首发于CSDN,转载注明出处🙉📢现在的付出,都会是一种沉淀,只为让你成为更好的人✨文章预览:一.分辨率(Resolution)1、工业相机的分辨率是如何定义的?2、工业相机的分辨率是如何选择的?二.精度(Accuracy)1、像素精度(PixelAccuracy)2、定位精度和重复定位精度(RepeatPrecision)三.公差(Tolerance)四.课后作业(Post-ClassExercises)视觉行业的初学者,甚至是做了1~2年
我的Gallery模型中有以下查询:media_items.includes(:photo,:video).rank(:position_in_gallery)我的图库模型有_许多媒体项,每个都有一个照片或视频关联。到目前为止,一切正常。它返回所有media_items包括它们的photo或video关联,由media_item的position_in_gallery属性排序。但是我现在需要将此查询返回的照片限制为仅具有is_processing属性的照片,即nil。是否可以进行相同的查询,但条件是返回的照片等同于:.where(photo:'photo.is_processingIS
除了可访问性标准不鼓励使用这一事实指向当前页面的链接,我应该怎么做重构以下View代码?#navigation%ul.tabbed-ifcurrent_page?(new_profile_path)%li{:class=>"current_page_item"}=link_tot("new_profile"),new_profile_path-else%li=link_tot("new_profile"),new_profile_path-ifcurrent_page?(profiles_path)%li{:class=>"current_page_item"}=link_tot("p
我正在尝试按Rails相关模型中的字段进行排序。我研究的所有解决方案都没有解决如果相关模型被另一个参数过滤?元素模型classItem相关模型:classPriority我正在使用where子句检索项目:@items=Item.where('company_id=?andapproved=?',@company.id,true).all我需要按相关表格中的“位置”列进行排序。问题在于,在优先级模型中,一个项目可能会被多家公司列出。因此,这些职位取决于他们拥有的company_id。当我显示项目时,它是针对一个公司的,按公司内的职位排序。完成此任务的正确方法是什么?感谢您的帮助。PS-我
基本上,我只是试图在满足特定条件时停止程序运行其余行。unlessraw_information.firstputs"Noresultswerereturnedforthatquery"breakend然而,在程序运行之前我得到了这个错误:Invalidbreakcompileerror(SyntaxError)执行此操作的正确方法是什么? 最佳答案 abort("Noresultswerereturnedforthatquery")unlesscondition或unlessconditionabort("Noresultswer
如果用户是所有者,我有一个条件来检查说删除和文章。delete_articleifuser.owner?另一种方式是user.owner?&&delete_article选择它有什么好处还是它只是一种写作风格 最佳答案 性能不太可能成为该声明的问题。第一个要好得多-它更容易阅读。您future的自己和其他将开始编写代码的人会为此感谢您。 关于ruby-on-rails-如果条件与&&,是否有任何性能提升,我们在StackOverflow上找到一个类似的问题: