RedBean PHP不会插入两个表

时间:2013-12-25 14:39:02

标签: php mysql insert foreign-keys redbean

我有两个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使用有问题。我搜索了很多地方,但我无法解决这个问题。

2 个答案:

答案 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选择通过自己的列表检索的字段。然而,这只是一个预感 - 下次我在我的开发机器上测试这个并更新这个答案。