没有数据库的Laravel模型

Dus*_*vak 9 php eloquent laravel-4

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

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

但我想创造一顿新餐,但不将其存放在DB中.

像这样的东西:

$meal = new Meal;
$meal->ingredients()->attach(5);
Run Code Online (Sandbox Code Playgroud)

其中5是DB中成分的id.

然而,这将失败,因为$ meal尚未存储在DB中,而attach()函数试图在meal_ingredient表中创建新记录....

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

谢谢

Lar*_*lMG 9

你的问题:

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


我们采取:

  • 是的,您可以使用一种没有数据库的Laravel 模型(在您说出时离线).请参考jenssegers/laravel-model.基本上它是一个实现类ArrayAccess,ArrayableInterface,JsonableInterface一些州和行为需要.

  • 是的,应该有一种方法可以将"在线" Illuminate\Database\Eloquent\Model与您的"离线"模型联系起来:POO并且Design Pattern有助于救援.弄脏你的手,不要犹豫,深入研究源代码!

我们建议您根据源代码推出自己的"离线"模型,jenssegers/laravel-model并扩展"在线" Illuminate\Database\Eloquent\Model(装饰模式或其他!?),使其了解前者.管道留给你,到目前为止没有勺子喂代码;-)


笔记:

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

FIY,您还可以使用最新的PHP功能找到在Illuminate\Database\Eloquent\Model此 扩展jarektkaczyk/Eloquent-triple-pivot的相关示例.

快乐的编码.

  • DaVe 的回答是有道理的,因为这就是从表单输入创建新记录的方式:您创建一个新实例并使用它,直到将其保存到数据库。 (2认同)

daV*_*aVe 6

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

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

$meal = new Meal;
$meal->ingredients->add($ingredient);
Run Code Online (Sandbox Code Playgroud)

因此DB中不存在膳食和成分数5.