我有模型餐可以包含模型成分和成分有很多属性...
我有DB中的所有成分,还有一些饭菜......
但我想创建新餐,但不将其存储在DB中。
如下所示:
$meal = new Meal;
$meal->ingredients()->attach(5);
其中5是DB中成分的id。
但是这会失败,因为$ meal还没有存储在DB中,而且attach()函数试图在meal_ingredient表中创建一条新记录....
那么有什么方法可以创建“离线”模型并将其与“在线”数据连接起来吗?
由于
答案 0 :(得分:7)
那么有什么方法可以创建"离线"模型并连接它 "网"数据?
是的,你可以使用一种没有数据库的Laravel 模型(当你说出来时离线)。请参阅jenssegers/laravel-model。基本上它是一个实现ArrayAccess
,ArrayableInterface
,JsonableInterface
的类,根据需要包含一些状态和行为。
是的,应该有办法连接"在线" Illuminate\Database\Eloquent\Model
与你的"离线"型号:POO
和Design 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号。