我有一个Project
模型。每个Project
可以具有缩略图,主图像和其他多个资产/图像(例如项目细节)以及多个文本内容(将放置在这些图像之间)。每个Project
页面将引入这些资源(缩略图除外)和文本,并按特定顺序显示它们(我通过拖放控制面板定义)。
所以基本上与Behance
使用的结构类似。我正在尝试使用Eloquent来构建它,这是我到目前为止所拥有的:
我有模型Image
Text
和Node
。 Node
模型表的order
列可自定义这些节点。
我的多态关系如下:
我的Project
型号:
public function nodes()
{
return $this->morphedByMany(Node::class, 'nodeable');
}
我的Node
型号:
public function nodeable()
{
return $this->morphTo();
}
然后在我的代码中,我执行以下操作:
$project = new App\Project;
$project->title = 'Some title';
$project->save();
$image = new App\Image;
$image->source = 'somefile.jpg';
$project->nodes()->save($image);
但是我收到以下错误:
Illuminate\Database\QueryException with message 'SQLSTATE[42S22]: Column not found: 1054 Unknown column 'project_id' in 'field list' (SQL: insert into `nodeables` (`nodeable_id`, `nodeable_type`, `project_id`) values (5, App\Node, 1))'
所以我猜它正试图在数据透视表nodeables
中创建一个条目。然后我创建了这个表,并在数据透视表中保存了一个条目,但不在nodes
表内。
这让我很生气! :(
答案 0 :(得分:0)
节点尚未保存,因为您使用该关系来保存图像模型。没有新节点对象的实例。
您需要在节点模型中定义图像和文本的关系,因此在保存时您将使用
$node = new App\Node;
$node->save($image);
$project->nodes()->save($node);
理想情况下,这将在数据库中保存节点记录。但是,如果节点的工作只是持有订单。考虑在数据透视表中添加字段。