gpt4 book ai didi

PHP ActiveRecord 通过 Has_Many 关联创建子模型

转载 作者:可可西里 更新时间:2023-11-01 13:30:53 26 4
gpt4 key购买 nike

我正在学习 PHP Active Record 并处理关联。我有两个相关对象使用“Has_Many”和“Belongs_to”(父/子)并在创建新父记录时尝试创建子记录(在本例中为我的“单元”创建“皮肤”)。

class Unit extends ActiveRecord\Model 
{
static $has_many = array(
array('skins')
);
}

class Skin extends ActiveRecord\Model
{
static $belongs_to = array(
array('unit')
);
}

我在这里找到了这两个线程: http://www.phpactiverecord.org/boards/4/topics/153 Activerecord-association: create new object (find class)

所以我的代码目前看起来像:

$unit = new Unit();
$unit->name = 'somename';
$unit->description = 'somedescription';

$skinArray = array('name' => $unit->name.' Default Skin');
$unit->create_skins($skinArray);
$unit->save();

上面的代码没有将新皮肤与数据库或代码中的单位相关联,尽管它/is/在数据库中放置了一个新皮肤记录(unit_id 为 NULL)。使用“build_skins”不会将皮肤记录放入数据库中。

我希望有一种方法可以像其他一些 ORM 一样通过模型本身向父模型添加“子”。我能做到这一点的唯一方法是明确地做到这一点:

$unit = new Unit();
$skin = new Skin();

$unit->name = 'somename';
$unit->description = 'somedescription';
$unit->save();

$skin->unit_id = $unit->id;
$skin->name = $unit->name.' Default Skin';
$skin->save();

也许这就是 PHP ActiveRecord 应该采用的方式,而我的预期是错误的。但是我希望有一种方法可以通过不需要先通过显式调用将父级保存到数据库的对象来完成。例如,“Recess”PHP 框架将对单元进行简单调用,如下所示: $unit->addSkin($skin);

最佳答案

你配置数据库连接了吗?看gihub示例。

<?php
require_once __DIR__ . '/../../ActiveRecord.php';

class Book extends ActiveRecord\Model
{
// explicit table name since our table is not "books"
static $table_name = 'simple_book';

// explicit pk since our pk is not "id"
static $primary_key = 'book_id';

// explicit connection name since we always want production with this model
static $connection = 'production';

// explicit database name will generate sql like so => db.table_name
static $db = 'test';
}

$connections = array(
'development' => 'mysql://invalid',
'production' => 'mysql://test:test@127.0.0.1/test'
);

// initialize ActiveRecord
ActiveRecord\Config::initialize(function($cfg) use ($connections)
{
$cfg->set_model_directory('.');
$cfg->set_connections($connections);
});

print_r(Book::first()->attributes());
?>

您必须初始化数据库才能执行此操作 ActiveRecord\Config::initialize

关于PHP ActiveRecord 通过 Has_Many 关联创建子模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11769288/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com