Php 如何通过3+;桌子
目前正在拉威尔研究一个非常基本的三表/模型问题,并且正确的雄辩设置让我的大脑泄漏 集合->集合id 项目->项目id,集合id,类型id 类型->类型id 我可以用一千种方式表达它,但不能开始概念化适当的雄辩关系: 集合有许多项,每个项都有一个类型。或者,一个项目属于一个集合,类型与多个项目关联 对我来说,集合和项目是关键,而类型实际上是给定项目上的附加参考数据;基本上是项目的一个类别 我的目标是构建一个解决方案,其中用户创建集合,向这些集合添加项目,并且这些项目与许多类型(他们也将定义)中的一种关联 我知道这个例子离其他作者、书籍、类别不远;或者城市、州、国家/地区的示例,但实现这些模型框架并不能从COLLECTIONITEMTYPE构建完全连接,而且在尝试关联集合中的类型时,最明显的是失败了 型号: 收藏Php 如何通过3+;桌子,php,mysql,laravel,eloquent,Php,Mysql,Laravel,Eloquent,目前正在拉威尔研究一个非常基本的三表/模型问题,并且正确的雄辩设置让我的大脑泄漏 集合->集合id 项目->项目id,集合id,类型id 类型->类型id 我可以用一千种方式表达它,但不能开始概念化适当的雄辩关系: 集合有许多项,每个项都有一个类型。或者,一个项目属于一个集合,类型与多个项目关联 对我来说,集合和项目是关键,而类型实际上是给定项目上的附加参考数据;基本上是项目的一个类别 我的目标是构建一个解决方案,其中用户创建集合,向这些集合添加项目,并且这些项目与许多类型(他们也将定义)中的一
class Collection extends Model
{
protected $guarded = [];
public function items()
{
return $this->hasMany(Item::class);
}
public function types()
{
return $this->hasManyThrough(Type::class, Item::class);
}
}
项目
类型
这些型号的COLLECTIONITEM在两个方向都工作得很好,但当我尝试集成类型时,轮子会脱落。根据我尝试过的1000个变体,我要么在Tinker中得到NULL,要么它在类型中寻找一个不存在也不应该存在的ITEM_ID
更新模型以准确反映集合中具有一种类型和最终类型集的项,解决方案是什么
提前谢谢
更新:工作嵌套解决方案-主要响应解决方案在集合中显示2个关系,无嵌套:
class Collection extends Model
{
protected $guarded = [];
public function items()
{
return $this->hasMany(Item::class);
}
您可以先调用项目,然后通过关系获取项目类型
public function getCollectionOfItemsBaseOnType($type){
$collections = Collection::all();
$items = [];
foreach($collections as $collection){
if($collection->item->type == $type){
array_push($items, $collection->item);
}
}
}
return $items;
您可以先调用项目,然后通过关系获取项目类型
public function getCollectionOfItemsBaseOnType($type){
$collections = Collection::all();
$items = [];
foreach($collections as $collection){
if($collection->item->type == $type){
array_push($items, $collection->item);
}
}
}
return $items;
HasManyThrough
不是集合和类型之间的正确关系HasManyThrough
有点像将2有许多关系链接在一起:
Country -> State -> City
注意箭头都是单向的。这是因为城市有一个国家的外键,而国家有一个国家的外键
你们的关系是这样的:
Collection -> Item <- Type
如果要获取集合及其项以及每个项下的相应类型,可以执行以下操作:
Collection::with(['items.type'])->get();
HasManyThrough
不是集合和类型之间的正确关系HasManyThrough
有点像将2有许多关系链接在一起:
Country -> State -> City
注意箭头都是单向的。这是因为城市有一个国家的外键,而国家有一个国家的外键
你们的关系是这样的:
Collection -> Item <- Type
如果要获取集合及其项以及每个项下的相应类型,可以执行以下操作:
Collection::with(['items.type'])->get();
您在collection()
的项目模型上似乎有错误的关系。一个HasOne
意味着集合表有一个指向Item表的外键。请检查我的更新答案。您在collection()
的项目模型上似乎有错误的关系。一个HasOne
意味着集合表有一个指向Item表的外键。请检查我的最新答案。
Collection -> Item <- Type
Collection::with(['items.type'])->get();