如何解决如何用Phalcon双向定义1-1关系?
我有两个表work_order
和project
。在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
,但是我无法使用Project
从WorkOrder
中检索$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 举报,一经查实,本站将立刻删除。