0

我有 3 个模型:客户端、任务和任务状态(用于为每个客户端匹配任务)。
模型_任务

protected static $_properties = array(
        'id',
        'name',
        'created_at',
        'updated_at',
    );

模型_客户端

protected static $_properties = array(
        'id',
        'name',
        'created_at',
        'updated_at',
    );

模型_任务状态

protected static $_properties = array(
        'id',
        'client',
        'task',
        'created_at',
        'updated_at',
    );

我已将以下内容添加到 Model_Task

protected static $_has_many = array(
        'taskstatuses' => array(
            'key_from' => 'id',
            'model_to' => 'Model_Taskstatus',
            'key_to' => 'task',
            'cascade_save' => true,
            'cascade_delete' => false,
        )
    );

模型_客户端

protected static $_has_many = array(
        'taskstatuses' => array(
            'key_from' => 'id',
            'model_to' => 'Model_Taskstatus',
            'key_to' => 'client',
            'cascade_save' => true,
            'cascade_delete' => false,
        )
    );

模型_任务状态

protected static $_belongs_to = array(
        'client' => array(
            'key_from' => 'client',
            'model_to' => 'Model_Client',
            'key_to' => 'id',
            'cascade_save' => true,
            'cascade_delete' => false,
        ),
        'task' => array(
            'key_from' => 'task',
            'model_to' => 'Model_Task',
            'key_to' => 'id',
            'cascade_save' => true,
            'cascade_delete' => false,
        )
    );

我希望 taskstatus 将客户端字段链接到客户端模型,并将任务字段链接到任务模型,如果用户插入的任务的值不在客户端或任务模型中(通过 id),则会出现错误。但它不起作用(我仍然可以向 clientstatus 添加客户端和任务表中不存在的客户端 ID 和任务 ID 的值。

4

1 回答 1

1

如果您坚持Model 约定,以下将正常工作:

class Model_Task extends \Orm\Model
{
    protected static $_belongs_to = array(
        'client'
    );

    protected static $_properties = array(
        'id',
        'name',
        'client_id',
        'created_at',
        'updated_at'
    );
}

class Model_Client extends \Orm\Model
{
    protected static $_has_many = array(
        'task'
    );

    protected static $_properties = array(
        'id',
        'name',
        'created_at',
        'updated_at'
    );
}

要获得客户的任务,您只需执行以下操作:

$client = Model_Client::find(1);

foreach($client->task as $task)
{
    /* do something with each $task */
}

编辑: 这样您就可以避免在客户端/任务之间有不必要的表/模型,从而迫使您将有效任务添加到现有客户端。此外,如果您想要客户端/任务之间的一对多关系,使用 Model_Taskstatus 将允许您将相同的任务分配给不同的客户端,这不是您想要的。

您应该检查Has Many文档。

于 2012-12-09T14:25:34.833 回答