1

コハナ3.2を使用しています。この新しいモデルを機能させるのに問題があります。モデルがあります。正常に機能するモデルと機能しないModel_User_Unavailabilityモデルがあります。Model_User_Unavailability_Status

問題はモデルを見つけることではなく、それを使用していることです。を使用してステータスを作成できます。ORM::factory('user_unavailability_status');これは問題なく機能しますが、ステータスをunavailabilityクラスに追加したい場合は機能せず、次の例外が発生します。

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ます。

4

1 に答える 1

2

add()has_manyの「スルー」関係で使用されます。

あなたの場合、あなたはすでに正しい方法を書いています:

$status->user_unavailability_id = $db->id;
$status->save();
于 2012-07-25T13:54:51.190 に答える