微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何用Phalcon双向定义1-1关系?

如何解决如何用Phalcon双向定义1-1关系?

我有两个表work_orderproject。在project记录上,有一个work_order_id字段。 project_id记录上没有work_order。我需要添加一个吗?

或者是否可以使用hasOne/belongsTo定义这些关系?

我尝试过:

class WorkOrder extends \Phalcon\Mvc\Model {
    public function initialize() {
        $this->hasOne('id',Project::class,'work_order_id');
    }
}
class Project extends \Phalcon\Mvc\Model {
    public function initialize() {
        $this->hasOne('work_order_id',WorkOrder::class,'id');
    }
}

我可以像这样WorkOrder从项目中检索$project->workOrder,但是我无法使用ProjectWorkOrder中检索$workOrder->project。我要建立双向关系。

我该怎么做?

解决方法

请尝试添加alias参数,因为隐式检索可能会尝试使用类名,并且在模型中不支持名称空间。

我发现在halcon 1/2/3中与hasOne一起使用时非常虚假。从那时起,我一直在使用belongsTo,直到为我的个人需求重新编写了Phalcon关系管理器的pre-post-save部分。请记住,beforeTo将在您使用的主要模型之前保存,其他类型的关系将在保存主记录后创建/更新。根据要保存记录及其关系的顺序,我选择使用“ belongsTo”或“ hasOne”。

class WorkOrder extends \Phalcon\Mvc\Model {
    public function initialize() {
        $this->belongsTo('project_id',Project::class,'id',['alias' => 'Project']);
    }
}

class Project extends \Phalcon\Mvc\Model {
    public function initialize() {
        $this->hasOne('id',WorkOrder::class,'project_id',['alias' => 'WorkOrder']);
        $this->hasMany('id',['alias' => 'WorkOrderList']);
    }
}

隐式检索应从您的类名称的ucfirst驼峰字符串开始,或使用get。

$workOrder = WorkOrder::findFirst();
$project = $workOrder->Project;
$project = $workOrder->getProject(['deleted <> 1']);

$workOrderList = $project->WorkOrderList;
$workOrder = $project->WorkOrder;
$workOrder = $project->getWorkOrder(['deleted <> 1','order' => 'projectId desc']);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。