没有数据库的Laravel模型

时间:2014-07-04 13:33:54

标签: php laravel-4 eloquent

我有模型餐可以包含模型成分和成分有很多属性...

我有DB中的所有成分,还有一些饭菜......

但我想创建新餐,但不将其存储在DB中。

如下所示:

$meal = new Meal;
$meal->ingredients()->attach(5);

其中5是DB中成分的id。

但是这会失败,因为$ meal还没有存储在DB中,而且attach()函数试图在meal_ingredient表中创建一条新记录....

那么有什么方法可以创建“离线”模型并将其与“在线”数据连接起来吗?

由于

2 个答案:

答案 0 :(得分:7)

你的问题:

  

那么有什么方法可以创建"离线"模型并连接它   "网"数据?


我们的选择:

  • 是的,你可以使用一种没有数据库的Laravel 模型(当你说出来时离线)。请参阅jenssegers/laravel-model。基本上它是一个实现ArrayAccessArrayableInterfaceJsonableInterface的类,根据需要包含一些状态和行为。

  • 是的,应该有办法连接"在线" Illuminate\Database\Eloquent\Model与你的"离线"型号:POODesign Pattern可以帮助您。亲自动手,不要犹豫,深入研究源代码!

我们建议您自己推出"离线"模型基于jenssegers/laravel-model的源代码并扩展" Online" Illuminate\Database\Eloquent\Model(装饰者模式或其他什么!?)使它具有前者的知识。管道留给你,到目前为止没有勺子喂代码;-)


说明:

您可能需要定义一些Illuminate\Database\Eloquent\Model的自定义依赖(辅助)类,例如Illuminate\Database\Eloquent\Relations\BelongsToMany等。

FIY,您还可以使用最新的PHP功能找到在此Illuminate\Database\Eloquent\Model扩展{{1}}的相关示例。

快乐的编码。

答案 1 :(得分:6)

您应该将对象视为集合,以“脱机”工作。 并记住构建它们不存在的对象。

$ingredient = new Ingredient;
$ingredient->id = 5;

$meal = new Meal;
$meal->ingredients->add($ingredient);

因此,DB中不存在膳食和成分5号。