我在两个实体(产品和报价)之间存在import UIKit
protocol SettingsSidebarViewDelegate{
func showTags(showTags: Bool);
func showTimestamp(showTimeStamp: Bool)
}
var showTagsVal = false
var showTimeStampVal = false
class SettingsSidebarViewController: UIViewController {
var delegate: SettingsSidebarViewDelegate! = nil
@IBOutlet weak var sidebar_title: UILabel!
@IBOutlet var showTagsSwitch: UISwitch!
@IBOutlet var showTimestampSwitch: UISwitch!
@IBAction func switchPressed(sender: AnyObject) {
let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil)
let nextViewController = storyBoard.instantiateViewControllerWithIdentifier("main") as! MainTableViewController
self.presentViewController(nextViewController, animated:true, completion:nil)
let vc = MainTableViewController()
self.delegate = vc
if showTagsSwitch.on{
showTagsVal = true
delegate.showTags(showTagsVal)
}
else{
showTagsVal = false
delegate.showTags(showTagsVal)
}
if showTimestampSwitch.on{
showTimeStampVal = true
delegate.showTimestamp(showTimeStampVal)
}
else{
showTimeStampVal = false
delegate.showTimestamp(showTimeStampVal)
}
}
override func viewDidLoad() {
super.viewDidLoad()
sidebar_title.text = "Settings"
// Do any additional setup after loading the view.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
关系,以便一个或多个产品可以在一个或多个引号中。例如:
假设客户从特定企业中选择两种产品,并且他希望收到总结所有选定产品的报价。然后他决定选择另一家企业的另一种产品来获得另一个报价。所以这里我们有两个不同企业和同一用户的报价,每个报价都有自己的产品。
你会说这是报价和产品之间的manytomany
关系,因为如上所述,一个报价可以有很多产品,所以在数据库中你会在产品表中有一个quote_id列。
但是,如果其他客户选择相同的产品,则会创建一个新的报价但是当查询通过填写产品表的quote_id列将这些产品插入报价中时,它会发现这些产品已经有了另一个引用的quote_id。
这就是为什么它是一个onetomany
关系,以便许多文章可以在很多引号中。
这一部分已经实现,我可以将许多产品与许多引号匹配而没有任何问题。
这是引用的实体:
manytomany
实体文章:
/**
* @ORM\ManyToMany(targetEntity="ArticleBundle\Entity\Article", mappedBy="quotes")
*/
private $articles;
public function __construct() {
$this->articles = new \Doctrine\Common\Collections\ArrayCollection();
$this->createdAt = new \DateTime();
}
/**
* Set articles
*
* @param \ArticleBundle\Entity\Article $articles
* @return Quote
*/
public function setArticles(\ArticleBundle\Entity\Article $articles = null) {
$this->articles = $articles;
return $this;
}
/**
* Get articles
*
* @return \ArticleBundle\Entity\Article
*/
public function getArticles() {
return $this->articles;
}
/**
* Add articles
*
* @param \QuoteBundle\Entity\Quote$articles
* @return Devis
*/
public function addArticle(\ArticleBundle\Entity\Article $article) {
$article->addQuote($this); // synchronously updating inverse side
$this->articles[] = $article;
return $this;
}
/**
* Remove articles
*
* @param \QuoteBundle\Entity\Quote $articles
*/
public function removeArticle(\ArticleBundle\Entity\Article $article) {
$this->articles->removeElement($article);
}
}
}
我觉得难以达到的部分是,当顾客只选择一种产品时,我想让他指定所选产品的数量。
所以当我更新了学说模式时,我得到了这些表:
引用表
产品表
quotes_products table
任何人都可以告诉我在哪个表中我必须添加数量列,以及如何编写注释以使其自动添加到数据库中。我认为它会被添加到quotes_products表中。
感谢您帮助我。
答案 0 :(得分:0)
将数量列添加到连接表时,您的关系将变得非常多。因此,将manyToMany关系分离为两个oneToMany关系没有问题,并为具有额外字段数量的连接创建实体类。
伪代码中的想法:
Class Quote
{
private $products;
/**
* @ORM\OneToMany(targetEntity="Product", mappedBy="quote")
*/
}
<强>产品:强>
Class Product
{
private $quotes;
/**
* @ORM\OneToMany(targetEntity="Quote", mappedBy="product")
*/
}
<强> ProdcutQuote:强>
Class ProductQuote
{
/**
* @ORM\ManyToOne(targetEntity="Quote")
* @ORM\JoinColumn(name="quote_id", referencedColumnName="id")
*/
private $quote;
/**
* @ORM\ManyToOne(targetEntity="Product")
* @ORM\JoinColumn(name="product_id", referencedColumnName="id")
*/
private $product;
private $quantity;
}