Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/244.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何通过3+;桌子_Php_Mysql_Laravel_Eloquent - Fatal编程技术网

Php 如何通过3+;桌子

Php 如何通过3+;桌子,php,mysql,laravel,eloquent,Php,Mysql,Laravel,Eloquent,目前正在拉威尔研究一个非常基本的三表/模型问题,并且正确的雄辩设置让我的大脑泄漏 集合->集合id 项目->项目id,集合id,类型id 类型->类型id 我可以用一千种方式表达它,但不能开始概念化适当的雄辩关系: 集合有许多项,每个项都有一个类型。或者,一个项目属于一个集合,类型与多个项目关联 对我来说,集合和项目是关键,而类型实际上是给定项目上的附加参考数据;基本上是项目的一个类别 我的目标是构建一个解决方案,其中用户创建集合,向这些集合添加项目,并且这些项目与许多类型(他们也将定义)中的一

目前正在拉威尔研究一个非常基本的三表/模型问题,并且正确的雄辩设置让我的大脑泄漏

集合->集合id

项目->项目id,集合id,类型id

类型->类型id

我可以用一千种方式表达它,但不能开始概念化适当的雄辩关系:

集合有许多项,每个项都有一个类型。或者,一个项目属于一个集合,类型与多个项目关联

对我来说,集合和项目是关键,而类型实际上是给定项目上的附加参考数据;基本上是项目的一个类别

我的目标是构建一个解决方案,其中用户创建集合,向这些集合添加项目,并且这些项目与许多类型(他们也将定义)中的一种关联

我知道这个例子离其他作者、书籍、类别不远;或者城市、州、国家/地区的示例,但实现这些模型框架并不能从COLLECTIONITEMTYPE构建完全连接,而且在尝试关联集合中的类型时,最明显的是失败了

型号:

收藏

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();