Ich bin zur Entwicklung des Projekts auf Symfony 2.0 umgestiegen und möchte einige Fragen stellen.
某草草
某草草 2017-05-16 16:46:03
0
1
523

Früher habe ich Symfony1.4+Propel verwendet, um Projekte zu entwickeln, und jetzt wechsle ich zu Symfony2.0, aber ich habe nie Doctrine verwendet, aber die offizielle Standardeinstellung ist Doctrine und entfernt Propel.
1. Welche Vorteile hat die Anwendung der Lehre? Relativ zur Stütze. Projekte sind Systemaspekte.
2. Bei der Verwendung von prop habe ich festgestellt, dass das Gruppieren nach nicht sehr nützlich ist, oder?
3. Wie geht die Lehre mit der Viele-zu-Viele-M:N-Beziehung um?

Darüber hinaus poste ich mögliche Probleme mit der Lehre und verweise auf andere:
1. Dokumentationsfehler. Verwenden Sie Optionen, um zusätzliche Feldoptionen zu konfigurieren, z. B. unsignierte und Standardattribute, die direkt im Feld angegeben werden.
2. Fremdschlüssel können nicht „unsigned“ oder „default“ angeben
3. Die Tabellenbeziehung ist eine nicht identifizierende Beziehung

Danke!

某草草
某草草

Antworte allen(1)
刘奇

“标准的”Doctrine所支持的功能,是PDO所支持的各关系型数据库(MySQL,PostgrelSql等)都具备的功能的集合,也就是说,所有A支持而B不支持的,Doctrine默认都不包含,但Doctrine有良好的扩展性和丰富的第三方代码,Baidu里怎么搜不知道,Google里搜Doctrine+Extensions,会有很多收获。

Doctrine多对多的支持还不错,够用。

在Symfony 2里你还是可以用Propel,官网上文档里有专门的一章。

Doctrine和Propel都不错(自己写数据库封装,也可以是好同志),各选各好吧,非要比较的话,可以举一些客观的区别:

  1. Doctrine是Data Mapper+Proxy模式,Propel是Active Record模式(这是个哲学问题);
  2. Doctrine的社区更活跃;
  3. Symfony 2使用Doctrine的Common库来实现的基于注解(annotation)的依赖注入(DI);
  4. Doctrine更现代一些(2.x),对PHP 5.3+的特性支持更好,但Propel也在赶上。

如前述,你所说的unsigned,这个特性不能跨数据库,自然也就没有被默认支持,但如果需要,办法很多,不在此答案中罗嗦。

default也不是能跨数据库的属性,但你可以在Doctrine的Entity类里,为做了映射的成员变量,定义一个默认值就可以了,夫复何求?

Doctrine的承诺就是跨库通用,我认为好的代码就是只做自己承诺的事,从这一点出发,Doctrine还是可以让人放心的。毕竟还有很多人在用PostgreSql或者SQLite,不要用MySQL的思维去强求一致。

Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage