我有两个MySQL表:
user
email
电子邮件表具有来自用户的外键。我将记录插入到用户表中并获取插入ID,然后插入到电子邮件表中。
我在RedBean中这样做
$user = R::dispense('user');
$user->name = 'John' ;
$email = R::dispense('email');
$email->email = $this->Email;
$email->user_id = R::store($user);
R::store($email);
但只填写用户表。没有记录输入电子邮件表。
这可能是什么问题?
-- -----------------------------------------------------
-- Table `mydb`.`User`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`User` (
`id` INT NOT NULL AUTO_INCREMENT,
`firstname` VARCHAR(45) NULL,
`middlename` VARCHAR(45) NULL,
`lastname` VARCHAR(45) NULL,
`email` VARCHAR(255) NULL,
`password` VARCHAR(255) NULL,
`address` VARCHAR(255) NULL,
`gender` ENUM('m','f') NULL DEFAULT 'm',
`birthday` VARCHAR(45) NULL,
`profilepic` VARCHAR(255) NULL,
`datecreated` DATETIME NULL,
`lastlogin` DATETIME NULL,
`lastactive` DATETIME NULL,
`mobilePhone` VARCHAR(45) NULL,
`businessPhone` VARCHAR(45) NULL,
`homePhone` VARCHAR(45) NULL,
`faxNumber` VARCHAR(45) NULL,
`drivingLicence` VARCHAR(45) NULL,
`passportNum` VARCHAR(45) NULL,
`bloodgrp` VARCHAR(5) NULL,
PRIMARY KEY (`id`))
ENGINE = InnoDB;
和电子邮件表
-- -----------------------------------------------------
-- Table `mydb`.`email`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`email` (
`id` INT NOT NULL AUTO_INCREMENT,
`email` VARCHAR(255) NOT NULL,
`verifyCode` VARCHAR(255) NULL,
`verified` TINYINT(1) NULL,
`User_id` INT NOT NULL,
PRIMARY KEY (`id`, `User_id`),
INDEX `fk_email_User1_idx` (`User_id` ASC),
CONSTRAINT `fk_email_User1`
FOREIGN KEY (`User_id`)
REFERENCES `mydb`.`User` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
此外,当我输入原始mysql时,插入按预期工作。我认为我的redbean使用有问题。我搜索了很多地方,但我无法解决这个问题。
答案 0 :(得分:2)
更改行
$email->user_id = R::store($user);
R::store($email);
到
$user->email = $email;
R::store($user);
并且假设您处于流体模式,将自动创建关系。
Redbean引擎将创建外键关系,并在 email 表中为您设置名为 user_id 的列。您甚至不必存储 $ email 对象,这会在存储 $ user 对象时发生。
答案 1 :(得分:1)
我很确定你干扰了RedBean中的一对多关系功能:http://redbeanphp.com/adding_lists。使用$obj -> ownChild
添加关系时,实际上是在对象中设置了child_id
。通过直接设置child_id
,您将创建一个RedBean选择通过自己的列表检索的字段。然而,这只是一个预感 - 下次我在我的开发机器上测试这个并更新这个答案。