php - 我如何获得通过与 Laravel 5/Eloquent 的两个多对多关系关联的不同类别列表?

标签 php mysql laravel eloquent laravel-5

我有一个复杂的数据模型,我正在尝试使用 Laravel 5/Eloquent 编写查询,而不仅仅是普通的 SQL。我下面的 SQL 可以工作,但我喝了 kool-aid,我想让它以“正确”的方式工作。

有一个many to many relationship Actor 和姿势之间和 many to many polymorphic relationship姿势和类别之间。

我想做的是通过 Actor 的姿势获取与 Actor 相关的所有不同类别的列表。

SQL

    SELECT DISTINCT 
        categories.name,
        categories.parent_id
    FROM 
        actor_pose 
    JOIN 
        poses ON poses.id = actor_pose.pose_id
    JOIN 
        categorizables ON categorizables.categorizable_id = poses.id  
    JOIN
        categories ON categories.id = categorizables.category_id
    WHERE 
        actor_pose.actor_id = 1 AND
        categorizables.categorizable_type = "App\\Pose"
    ORDER BY
        parent_id

数据库

Actor ID 姓名

姿势 ID 姓名

类别 ID 姓名 父ID

可分类 类别_id 可分类_id 可分类_类型

代码

CategorizedTrait.php

<?php namespace App;
trait CategorizableTrait {
    public function categories()
    {
        return $this->morphToMany('App\Category', 'categorizable');
    }
}

Pose.php

<?php namespace App;
class Pose extends Model
{
    use CategorizableTrait;
    public function actors()
    {
        return $this->belongsToMany('App\Actor')->withTimestamps();
    }
}

Actor.php

<?php namespace App;    
class Actor extends Model
{
    public function poses()
    {
        return $this->belongsToMany('App\Pose')->withTimestamps();
    }

最佳答案

链接到SoftOnSofa来自Jarek Tkaczyk我最终使用了一个干净的解决方案。

我将此方法添加到我的 Actor.php 文件中。

Actor.php

public function getCategoriesAttribute()
{
    $categories = new Collection;
    $this->load(['poses.categories' => function ($q) use ( &$categories ) {
        $categories = $q->get()->unique();
    }]);
    return $categories->sortBy('order')->sortBy('parent_id');
}

Controller 没有做任何特殊的事情。在 Blade 中,您可以按如下方式访问它。

index.blade.php

@foreach($actor->categories as $key => $category)
    {{ $category->name }}
@endforeach

关于php - 我如何获得通过与 Laravel 5/Eloquent 的两个多对多关系关联的不同类别列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30359555/

相关文章:

php - 如何进行忽略 undefined variable 的查询?

php - 是否可以使用我的数据库结构使用 Laravel 或 Sql 执行此查询?

laravel - PHP 7.2 count() 函数不起作用

php - 使用 PHP 创建自解压可执行文件

php - 垂直或水平 "settings"表?

php - 新建管理员,wordpress

mysql - Codeigniter插入双引号一次

php - Symfony 中的 Doctrine\ORM\Mapping\MappingException

mysql - MySql 中的大表和分析

php - Laravel 自定义分页 View 不起作用