我有一个具有 One Itineraries 对象的假期模型。Itineraries 对象有一个 holiday_id 作为外键(由 Li3 约定暗示)和一个对象数组,用于存储行程中每一天的信息。我正在使用 Lithium 0.11 和 MongoDB。
class Holidays extends \lithium\data\Model {
public $hasOne = array('Itineraries');
}
class Itineraries extends \lithium\data\Model {
//Relationships
public $belongsTo = array('Holidays');
}
控制器:
public function saveitinerary()
{
$holidays_id = $this->request->data['holidays_id'];
$holiday = Holidays::find($holidays_id, array('with' => 'Itineraries'));
if($holiday->Itineraries)
{
Itineraries::remove($holiday->itinerary._id);
}
//save the new itinerary data with added holidays_id as FK.
$a = array('holidays_id' => $this->request->data['holidays_id'], 'Itineraries' => $this->request->data['itineraries']);
$success = false;
$itinerary = Itineraries::create($a);
$success = $itinerary->save();
if(!$success)
$log->LogDebug("Could not add itinerary for in db for holiday id:" . $holidays_id );
return $itinerary->to('array');
以下是事件的顺序: 1. Holidays 文档在上一页的 MongoDB 集合中创建并成功保存。_id 被传递到基于主干的前端。创建 Holidays 对象时,Itineraries 对象为空(未添加/保存)。
在随后的页面上,用户选择行程并对控制器 (saveitinerary) 进行 AJAX/JSON 调用,传入holiday_id 和对象数组。每个对象代表假期的每一天。
saveitinerary() 获取 $holiday 中的当前 Holidays 文档,检查它是否有一个与之“相关”的 Itineraries 对象,如果是则删除它并从发布的新 JSON 中添加新行程。
问题:
- $holiday->Itineraries 是检查假期模型中“加入”数据的正确方法吗?
1a。Itineraries::remove($holiday->Itineraries._id) 是删除现有 hasOne 相关对象的正确方法吗?
目前,它始终显示为 null,即使在数据库中创建带有 holiday_id 和其他属性的行程对象时也是如此。
似乎几乎没有“创建”关系,因为从未拾取行程,即使文档是在行程集合中创建的(使用 MongoDB shell 验证)