【问题标题】:Inserting array into database Yii将数组插入数据库 Yii
【发布时间】:2012-07-23 02:21:20
【问题描述】:

我想在MYSQL数据库中插入一个数组,最好使用Yii的活动记录。

例如,我有一个数组:

User = array(
    fname => "Joe"
    lname => "Schmidt"
)

在我的数据库中有一个用户表,其中包含 id、fname 和 lname 列。其中一个选项是创建一个对象并执行以下操作:

$user = new User;
$user->fname = User['fname'];
$user->lname = User['lname'];
$user->save();

但是,对于这种常见功能,这似乎是很多代码。有没有办法将数组插入到数据库中,其中数组键与相应的列匹配,而无需我编写自己的函数或进行一些 SQL 查询破解?理想情况下,它使用 Yii 已经存在的 Active 记录。

【问题讨论】:

  • 您可以为此使用批量分配:$user = new User(); $user->attributes = $data_array; if(!$user->save()) { print_r($user->errors, true); }。将数组分配给 attributes 属性将满足您的需求,但仅适用于那些为当前场景定义了验证规则的属性。
  • @DCoder,这是我一直在寻找的一个伟大而简洁的解决方案!如果你把它作为答案,我会接受它。

标签: php yii


【解决方案1】:

你想做的事情由框架自己处理。

你可以像这样批量分配:

$user->attributes=$_POST['User'];

阅读更多关于Mass Assignment

【讨论】:

    【解决方案2】:

    我以前从未使用过 Yii,所以我无法提供使用它的解决方案,但您可以序列化数组并将其存储在数据库的单个单元格中,如下所示:

    $user = array("fname" => "Joe", "lname" => "Schmidt");
    $serialized = serialize($user);
    
    //Store the $serialized variable in the database
    

    当您准备好访问它时:

    //Get your data from the database
    
    $unserialized = unserialize($usersFromDB);
    $fname = $unserialized['fname']; //Joe
    

    希望对您有所帮助。

    【讨论】:

      【解决方案3】:

      函数很简单,试试这个:

        function insert($table, $fields_values = array())
        {
          $q1 = join(",", array_keys($fields_values));
      
          $q2 = "'".join("','", array_values($fields_values))."'";
      
          $query = "INSERT INTO $table($q1) VALUES($q2)";
      
          // do your DB insert here
        }
      

      主要技巧是使用join和array_keys / array_values进行数组到查询转换。

      【讨论】:

        【解决方案4】:

        根据数组中的数据量,您可以编写自己的函数,例如

        a) 勾选这个 backUpdate ,修改它以插入 /remove 渲染视图选项

        b) 关注thread

        c) 插入多条记录时可能traps

        d) 检查这个关联的SOQ

        如果你知道你在做什么很容易,你只需要照顾好

        • 验证
        • 关联表中存在记录(如果涉及 FKey)
        • 选项 d)。如果您有简单的插入(没有关联的表),这将是一个可能的答案

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-06-19
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多