【问题标题】:FuelPHP ORM one to one relation is not saving?FuelPHP ORM 一对一关系不省钱?
【发布时间】:2013-12-06 21:32:30
【问题描述】:

我正在尝试执行以下操作,该数组包含一些应保存到时间线表中的数据,其余数据应保存到日历表中。然而,当时间线正确更新时,只有默认值或空数据会保存到日历中,calendar_id 字段设置为 0。

/controller.php

$model = \Timeline\Model_Timeline::forge();
$model->calendar = \Timeline\Model_Calendar::forge();
$model->set($item);
$model->save();

/model/timeline.php

namespace Timeline;

class Model_Timeline extends \Orm\Model
{
    protected static $_properties = array(
        'id',
        'user_id' => array(
            'data_type' => 'int',
            'form' => array('type' => false),
        ),
        'calendar_id' => array(
            'data_type' => 'int',
            'form' => array('type' => false),
            'default' => '0'
        ),
        'created_at' => array(
            'data_type' => 'int',
            'form' => array('type' => false),
            'default' => '0'
        ),
        'updated_at' => array(
            'data_type' => 'int',
            'form' => array('type' => false),
            'default' => '0'
        )
    );

    protected static $_has_one = array(
        'calendar' => array(
            'key_from' => 'calendar_id',
            'model_to' => 'Timeline\\Model_Calendar',
            'key_to' => 'id',
            'cascade_save' => true,
            'cascade_delete' => true,
        )
    );

/model/calendar.php

namespace Timeline;

class Model_Calendar extends \Orm\Model
{
    protected static $_properties = array(
        'id',
        'start',
        'end',
        'recurrenceRule',
        'recurrenceException',
        'isAllDay',
        'created_at',           
        'updated_at'
    );

    protected static $_belongs_to = array(
        'calendar' => array(
            'key_from' => 'id',
            'model_to' => 'Timeline\\Model_Timeline',
            'key_to' => 'calendar_id',
            'cascade_save' => true,
            'cascade_delete' => true,
        )
    );
}

【问题讨论】:

    标签: php fuelphp fuelphp-orm


    【解决方案1】:

    假设这些变量是列=>值的数组,你可以直接做

    $model = \Timeline\Model_Timeline::forge($timeline_properties);
    $model->calendar = \Timeline\Model_Calendar::forge($calendar_properties);
    $model->save();
    

    【讨论】:

      【解决方案2】:

      我可以看到 $item 变量吗?

      我认为你需要这样做:

      $model = \Timeline\Model_Timeline::forge();
      $model->calendar = \Timeline\Model_Calendar::forge();
      $model->calendar->set($calendar_properties);
      $model->set($timeline_properties);
      $model->save();
      

      因为您只是为 Timeline 设置了一些属性,而 Calendar 项目为空,这就是为什么您将 calendar_id 设置为 0。您在日历表上是否有新项目?

      【讨论】:

      • 是的 - 或多或少我现在是如何工作的。我已经为每个 forge() 函数设置了 $item。我只是不确定这是正确的方法。我认为这与我的 ORM 关系的设置方式有关。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-18
      相关资源
      最近更新 更多