【问题标题】:Kohana 3.2. table name not found小花 3.2.未找到表名
【发布时间】:2012-07-25 12:43:36
【问题描述】:

我正在使用 kohana 3.2。我在让这个新模型工作时遇到了一些麻烦.. 模型:Model_User_Unavailability 可以正常工作,而模型 Model_User_Unavailability_Status 则不行。

问题不在于找到模型,而在于使用它。我可以使用:ORM::factory('user_unavailability_status'); 来创建状态,它工作得很好,但是当我想将状态添加到不可用性类时,它不会工作,我得到以下异常:

Incorrect table name '' [ INSERT INTO `` (`user_unavailability_id`, `status_id`) VALUES ('670', NULL) ]

类如下所示:

class Model_User_Unavailability extends ORM
{
    protected $_belongs_to = array(
        'user' => array(),
    );
    protected $_table_name = 'user_unavailability';

    protected $_has_many = array(
        'status' => array(
            'model' => 'User_Unavailability_Status', 
            'foreign_key' => 'user_unavailability_id'
        )
    );
...etc

class Model_User_Unavailability_Status extends ORM
{
    protected $_table_name = 'user_unavailability_status';
    protected $_belongs_to = array(
        'user_unavailability' => array(
            'foreign_key' => 'user_unavailability_id', 
            'model' => 'user_unavailability'
        )
    );
    etc...

现在当我尝试以下操作时出现异常:

$db = $user->unavailable->where('id', '=', $id)->find(); // Returns User_Unavailability object
//... do some other stuf...
$db->save();

if($db->loaded())
{
    $status = ORM::factory('user_unavailability_status');
    $status->status = 'requested';
    $status->responder_id = 1;
    $db->add('status',$status);
}

正如您在前面的异常中看到的,它不会使用指定的表名。但是,当我从状态类中删除 $_table_name 变量时,我收到以下错误:

Table 'urenregistratie.user_unavailability_statuses' doesn't exist [ SHOW FULL COLUMNS FROM `user_unavailability_statuses` ]

如您所见,它确实找到了模型,但找不到数据库表。所以我的问题是,这里发生了什么?我想我错过了一些东西,但我不知道是什么......

当我在状态模型中使用$this->_table_names_plural = false 时也会发生同样的情况。

那么...有什么建议/想法吗?

编辑:

当我将$db->add('status',$status); 行更改为:

$status->user_unavailability_id = $db->id;
$status->save();

虽然不漂亮,但我仍然想知道是什么阻止我使用 add 函数。

【问题讨论】:

  • 最好使用$status->user_availability = $db。此外,您无需在保存belongs_to 关系之前调用$status->save()
  • 我也遇到了同样的问题。 @biakaveron 你能帮忙澄清一下吗,因为这正是我所困惑的。如果Model_A属于Model_B,而我做$a->b = $b;,我不需要调用$a->save()或者我不需要调用$b->save()??或者等等,我根本不会调用 save ,因为分配 (__set()) 会完成这项工作?
  • 不,__set() 只会修改模型而不保存 (github.com/kohana/orm/blob/3.3/master/classes/Kohana/…)。在 $a 模型中进行所有更改,然后保存。

标签: php orm kohana kohana-3


【解决方案1】:

add() 用于has_many "through" 关系。

在您的情况下,您已经编写了正确的方法:

$status->user_unavailability_id = $db->id;
$status->save();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-01
    • 2021-07-25
    • 1970-01-01
    • 2018-11-14
    • 2017-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多