Laravel Eloquent - 属于许多通过

Posted

技术标签:

【中文标题】Laravel Eloquent - 属于许多通过【英文标题】:Laravel Eloquent - belongs to many through 【发布时间】:2014-07-19 14:08:55 【问题描述】:

我有网站、页面、元素和 element_creators 表,如下所示:

   sites
     id
     ...
   pages
     id
     site_id
     ...
   elements
     id
     page_id
     ...
   element_creators
     id
     element_id
     ...

我能够检索链接到页面的元素创建者

    $this->belongsToMany('ElementCreator', 'elements', 'page_id', 'element_creator_id');

是否有一种简单的方法可以检索特定网站的所有元素创建者(通过其页面)?

谢谢!

【问题讨论】:

这段代码有问题:要么不是belongsToMany 关系页面->创建者(而是 hasManyThrough),要么这些表的架构与您编写的不同。有可能的解决方案取决于此。 【参考方案1】:

目前,我将其用作临时解决方案,希望能找到更好的解决方案:

    public function elementCreators()
    
        $elementCreators = array();
            foreach ($this->pages as $page) 
                foreach ($page->elementCreators as $elementCreator) 
                    $elementCreators[$elementCreator->id] = $elementCreator;
                
            
        return \Illuminate\Database\Eloquent\Collection::make($elementCreators);
    

【讨论】:

【参考方案2】:

你可以试试这个:

$site = Site::with('pages.elementCreators')->find(1); // 1 is id for example

然后你可以使用这个访问所有elementCreators

$elementCreators = $site->pages->fetch('elementCreators');

【讨论】:

它有效。但是,目前还有其他更简单的方法吗?

以上是关于Laravel Eloquent - 属于许多通过的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5 / Eloquent - 对属于多的关系进行查询过滤

如何将许多语句 mysql 转换为 laravel eloquent?

Laravel eloquent count 属于某一特定事件部门的参与者总数

如何在 Laravel 中使用 eloquent 执行多表选择

我需要知道用于查询嵌套关系并返回结果的 Laravel Eloquent 语法

复杂的 SQL / Laravel Eloquent 查询